Conexão a um cluster usando o kubectl
Cenário
Esta seção usa um cluster do CCE como um exemplo para descrever como conectar a um cluster do CCE usando kubectl.
Permissões
Quando você acessa um cluster usando kubectl, o CCE usa kubeconfig.json gerado no cluster para autenticação. Esse arquivo contém informações do usuário, com base no qual o CCE determina quais recursos do Kubernetes podem ser acessados pelo kubectl. As permissões registradas em um arquivo kubeconfig.json variam de usuário para usuário.
Para obter detalhes sobre permissões de usuário, consulte Permissões de cluster (baseadas no IAM) e permissões de namespace (baseadas no Kubernetes RBAC).
Usar o kubectl
Para se conectar a um cluster do Kubernetes a partir de um PC, você pode usar o kubectl, uma ferramenta de linha de comando do Kubernetes. Você pode fazer logon no console do CCE, clicar no nome do cluster a ser conectado e exibir o endereço de acesso e o procedimento de conexão de kubectl na página de detalhes do cluster, conforme mostrado na Figura 1.
- Acesso de intranet: o cliente que acessa o cluster deve estar na mesma VPC que o cluster.
- Acesso público: o cliente que acessa o cluster deve ser capaz de acessar redes públicas e o cluster foi vinculado a um IP de rede pública.
Para vincular um IP público (EIP) ao cluster, vá para a página de detalhes do cluster e clique em Bind ao lado de EIP no painel de Connection Information, conforme mostrado na Figura 1. Em um cluster com um EIP vinculado, o kube-apiserver será exposto a redes públicas e poderá ser atacado. É aconselhável configurar o Advanced Anti-DDoS (AAD) para o EIP do nó onde o kube-apiserver reside.
Baixe o kubectl e o arquivo de configuração. Copie o arquivo para o seu cliente e configure o kubectl. Após a conclusão da configuração, você pode acessar seus clusters do Kubernetes. Procedimento:
- Baixe kubectl.
Prepare um computador que possa acessar a rede pública e instale o kubectl no modo CLI. Você pode executar o comando kubectl version para verificar se o kubectl foi instalado. Se o kubectl tiver sido instalado, pule esta etapa.
Esta seção usa o ambiente Linux como um exemplo para descrever como instalar e configurar o kubectl. Para obter detalhes, consulte Instalação do kubectl.
- Faça logon no seu cliente e baixe o kubectl.
cd /home curl -LO https://dl.k8s.io/release/{v1.25.0}/bin/linux/amd64/kubectl
{v1.25.0} especifica o número da versão. Substitua-o conforme necessário.
- Instale o kubectl.
chmod +x kubectl mv -f kubectl /usr/local/bin
- Faça logon no seu cliente e baixe o kubectl.
- Obtenha o arquivo de configuração de kubectl (kubeconfig).
No painel de Connection Information na página de detalhes do cluster, clique em Configure ao lado de kubectl. Na janela exibida, baixe o arquivo de configuração.
Figura 2 Baixar arquivo de configuração
- O arquivo de configuração de kubectl kubeconfig.json é usado para autenticação de cluster. Se o arquivo for vazado, seus clusters podem ser atacados.
- Por padrão, a autenticação bidirecional é desabilitada para nomes de domínio no cluster atual. Você pode executar o comando kubectl config use-context externalTLSVerify para habilitar a autenticação bidirecional. Para obter detalhes, consulte Autenticação bidirecional para nomes de domínio. Para um cluster vinculado a um EIP, se a autenticação falhar (x509: certificate is valid) quando a autenticação bidirecional for usada, vincule o EIP novamente e faça o download do kubeconfig.json novamente.
- As permissões do Kubernetes atribuídas pelo arquivo de configuração baixado pelos usuários do IAM são as mesmas atribuídas aos usuários do IAM no console do CCE.
- Se a variável de ambiente KUBECONFIG estiver configurada no sistema operacional Linux, o kubectl carregará preferencialmente a variável de ambiente KUBECONFIG em vez de $home/.kube/config.
- Configure o kubectl.
Configure o kubectl (um sistema operacional Linux é usado).
- Faça logon no seu cliente e copie o arquivo de configuração kubeconfig.json baixado em 2 para o diretório /home no seu cliente.
- Configure o arquivo de autenticação kubectl.
cd /home mkdir -p $HOME/.kube mv -f kubeconfig.json $HOME/.kube/config
- Alterne o modo de acesso kubectl com base em cenários de serviço.
- Execute este comando para habilitar o acesso dentro da VPC:
kubectl config use-context internal
- Execute este comando para habilitar o acesso público (EIP necessário):
kubectl config use-context external
- Execute este comando para habilitar o acesso público e a autenticação bidirecional (EIP necessário):
kubectl config use-context externalTLSVerify
Para obter detalhes sobre a autenticação bidirecional do cluster, consulte Autenticação bidirecional para nomes de domínio.
- Execute este comando para habilitar o acesso dentro da VPC:
Autenticação bidirecional para nomes de domínio
O CCE suporta autenticação bidirecional para nomes de domínio.
- A autenticação bidirecional está desabilitada para nomes de domínio por padrão. Você pode executar o comando kubectl config use-context externalTLSVerify para alternar para o contexto de externalTLSVerify para ativá-lo.
- Quando um EIP estiver vinculado ou não vinculado a um cluster, ou um nome de domínio personalizado for configurado ou atualizado, o certificado do servidor de cluster será adicionado ao endereço de acesso de cluster mais recente (incluindo o EIP vinculado ao cluster e todos os nomes de domínio personalizados configurados para o cluster).
- A sincronização assíncrona do cluster demora cerca de 5 a 10 minutos. Você pode exibir o resultado da sincronização em Synchronize Certificate de Operation Records.
- Para um cluster vinculado a um EIP, se a autenticação falhar (x509: certificate is valid) quando a autenticação bidirecional for usada, vincule o EIP novamente e faça o download do kubeconfig.json novamente.
- Se a autenticação bidirecional do nome de domínio não for suportada, kubeconfig.json contém o campo "insecure-skip-tls-verify": true, como mostrado em Figura 3. Para usar a autenticação bidirecional, você pode baixar o arquivo kubeconfig.json novamente e ativar a autenticação bidirecional para os nomes de domínio.
Perguntas frequentes
- Erro do servidor proibido
Quando você usa o kubectl para criar ou consultar recursos do Kubernetes, a seguinte saída é retornada:
# kubectl get deploy Error from server (Forbidden): deployments.apps is forbidden: User "0c97ac3cb280f4d91fa7c0096739e1f8" cannot list resource "deployments" in API group "apps" in the namespace "default"
A causa é que o usuário não tem permissões para operar os recursos do Kubernetes. Para obter detalhes sobre como atribuir permissões, consulte Permissões de namespace (com base no RBAC do Kubernetes).
- A conexão com o servidor localhost:8080 foi recusada
Quando você usa o kubectl para criar ou consultar recursos do Kubernetes, a seguinte saída é retornada:
The connection to the server localhost:8080 was refused - did you specify the right host or port?
A causa é que a autenticação de cluster não está configurada para o cliente de kubectl. Para mais detalhes, consulte 3.