Este documento foi traduzido usando tecnologia de tradução automática de máquina. Sempre trabalhamos para apresentar traduções precisas, mas não oferecemos nenhuma garantia em relação à integridade, precisão ou confiabilidade do conteúdo traduzido. Em caso de qualquer discrepância, a versão original em inglês prevalecerá e constituirá o texto official.

Kubeconfigs

Recurso Kubeconfig

Kubeconfig é um recurso do Rancher kubeconfigs.ext.cattle.io que permite gerar v1.Config arquivos kubeconfig para interagir com o Rancher e clusters gerenciados pelo Rancher.

kubectl api-resources --api-group=ext.cattle.io

Para obter uma descrição dos campos e da estrutura do recurso Kubeconfig, execute:

kubectl explain kubeconfigs.ext.cattle.io

Criando um Kubeconfig

Desde o Rancher v2.13, o status.bearerToken contém um token Bearer totalmente formado e pronto para uso que pode ser usado para autenticar na API do Rancher.

Apenas um usuário válido e ativo do Rancher pode criar um Kubeconfig. Por exemplo, tentar criar um Kubeconfig usando uma system:admin conta de serviço resulta em um erro:

kubectl create -o jsonpath='{.status.value}' -f -<<EOF
apiVersion: ext.cattle.io/v1
kind: Kubeconfig
EOF
Error from server (Forbidden): error when creating "STDIN": kubeconfigs.ext.cattle.io is forbidden: user system:admin is not a Rancher user

O conteúdo do kubeconfig é gerado e retornado no campo .status.value apenas uma vez quando o Kubeconfig é criado com sucesso, pois contém valores secretos para os tokens criados. Portanto, ele deve ser capturado usando uma opção de saída apropriada, como -o jsonpath='{.status.value}', ou -o yaml.

Um kubeconfig pode ser criado para mais de um cluster ao mesmo tempo, especificando uma lista de nomes de clusters no campo spec.clusters. Você pode procurar nomes de clusters listando recursos clusters.management.cattle.io.

kubectl get clusters.management.cattle.io -o=jsonpath="{.items[*]['metadata.name', 'spec.displayName']}{'\n'}"
local local
c-m-p66cdvlj downstream1

Os campos metadata.name e metadata.generateName são ignorados, e o nome do novo Kubeconfig é gerado automaticamente usando o prefixo kubeconfig-.

Você pode usar o campo spec.currentContext para definir o nome do cluster, e ele é usado para definir o contexto atual no kubeconfig. Se você não definir o campo spec.currentContext, então o primeiro cluster na lista spec.clusters é usado como o contexto atual. Para clusters habilitados para ACE que não têm um FQDN definido, o primeiro nó do plano de controle é usado como o contexto atual.

Para clusters habilitados para ACE, se o FQDN estiver definido, então esse é usado como uma entrada de cluster no kubeconfig; caso contrário, entradas para todos os nós do plano de controle são criadas.

kubectl create -o jsonpath='{.status.value}' -f -<<EOF
apiVersion: ext.cattle.io/v1
kind: Kubeconfig
spec:
  clusters: [c-m-p66cdvlj, c-m-fcd3g5h]
  description: My Kubeconfig
  currentContext: c-m-p66cdvlj
EOF

Se "*" for especificado como o primeiro item no campo spec.clusters, o kubeconfig é criado para todos os clusters aos quais o usuário tem acesso, se houver.

kubectl create -o jsonpath='{.status.value}' -f -<<EOF
apiVersion: ext.cattle.io/v1
kind: Kubeconfig
spec:
  clusters: ["*"]
  description: My Kubeconfig
EOF

Se spec.ttl não for especificado, os tokens do Kubeconfig são criados com o tempo de expiração definido na configuração kubeconfig-default-token-ttl-minutes, que é de 30 dias por padrão. Se spec.ttl for especificado, deve ser maior que 0 e menor ou igual ao valor da configuração kubeconfig-default-token-ttl-minutes expresso em segundos.

kubectl create -o jsonpath='{.status.value}' -f -<<EOF
apiVersion: ext.cattle.io/v1
kind: Kubeconfig
spec:
  clusters: [c-m-p66cdvlj] # Downstream cluster
  ttl: 7200 # 2 hours
EOF

Listando Kubeconfigs

Listar Kubeconfigs gerados anteriormente pode ser útil para limpar tokens de suporte se o Kubeconfig não for mais necessário (por exemplo, se ele foi emitido temporariamente). Administradores podem listar todos os Kubeconfigs, enquanto usuários regulares podem apenas visualizar os seus próprios.

kubectl get kubeconfig
NAME               TTL   TOKENS   STATUS     AGE
kubeconfig-zp786   30d   2/2      Complete   18d
kubeconfig-7zvzp   30d   1/1      Complete   12d
kubeconfig-jznml   30d   1/1      Complete   12d

Use -o wide para obter mais detalhes:

kubectl get kubeconfig -o wide
NAME               TTL   TOKENS   STATUS     AGE     USER         CLUSTERS       DESCRIPTION
kubeconfig-zp786   30d   2/2      Complete   18d     user-w5gcf   *              all clusters
kubeconfig-7zvzp   30d   1/1      Complete   12d     u-w7drc      *
kubeconfig-jznml   30d   1/1      Complete   12d     u-w7drc      *

Visualizando um Kubeconfig

Administradores podem obter qualquer Kubeconfig, enquanto usuários regulares podem apenas obter o seu próprio.

kubectl get kubeconfig kubeconfig-zp786
NAME               TTL   TOKENS   STATUS     AGE
kubeconfig-zp786   30d   2/2      Complete   18d

Use -o wide para obter mais detalhes:

kubectl get kubeconfig kubeconfig-zp786 -o wide
NAME               TTL   TOKENS   STATUS     AGE     USER         CLUSTERS       DESCRIPTION
kubeconfig-zp786   30d   2/2      Complete   18d     user-w5gcf   *              all clusters

Deletando um Kubeconfig

Administradores podem deletar qualquer Kubeconfig, enquanto usuários regulares podem apenas deletar o seu próprio. Quando um Kubeconfig é deletado, os tokens kubeconfig também são deletados.

kubectl delete kubeconfig kubeconfig-zp786
kubeconfig.ext.cattle.io "kubeconfig-zp786" deleted

Para deletar um Kubeconfig usando pré-condições:

cat <<EOF | k delete --raw /apis/ext.cattle.io/v1/kubeconfigs/kubeconfig-zp786 -f -
{
  "apiVersion": "v1",
  "kind": "DeleteOptions",
  "preconditions": {
    "uid": "52183e05-d382-47d2-b4b9-d0735823ce90",
    "resourceVersion": "31331505"
  }
}
EOF

Deletando uma Coleção de Kubeconfigs

Administradores podem deletar qualquer Kubeconfig, enquanto usuários regulares podem apenas deletar o seu próprio.

Para deletar todos os Kubeconfigs:

kubectl delete --raw /apis/ext.cattle.io/v1/kubeconfigs

Para deletar uma coleção de Kubeconfigs por rótulo:

kubectl delete --raw /apis/ext.cattle.io/v1/kubeconfigs?labelSelector=foo%3Dbar

Atualizando um Kubeconfig

Apenas o metadata (por exemplo, adicionando um rótulo ou uma anotação) e o campo spec.description podem ser atualizados. Todos os outros campos spec são imutáveis.

Para editar um Kubeconfig:

kubectl edit kubeconfig kubeconfig-zp786

Para aplicar um patch a um Kubeconfig e atualizar sua descrição:

kubectl patch kubeconfig kubeconfig-zp786 -type merge -p '{"spec":{"description":"Updated description"}}'
kubeconfig.ext.cattle.io/kubeconfig-zp786 patched

kubectl get kubeconfig kubeconfig-fdcpl -o jsonpath='{.spec.description}'
Updated description

Para aplicar um patch a um Kubeconfig e adicionar um rótulo:

kubectl patch kubeconfig kubeconfig-zp786 -type merge -p '{"metadata":{"labels":{"foo":"bar"}}}'
kubeconfig.ext.cattle.io/kubeconfig-zp786 patched

kubectl get kubeconfig kubeconfig-zp786 -o jsonpath='{.metadata.labels.foo}'
bar