Esta seção da documentação do Kubernetes contém referências.
Para chamar a API Kubernetes de uma linguagem de programação, você pode usar bibliotecas de clientes. Bibliotecas oficialmente suportadas:
Um arquivo dos documentos de design para as funcionalidades do Kubernetes. Bons pontos de partida são Arquitetura Kubernetes e Visão geral do design do Kubernetes.
Essa página demonstra uma visão geral sobre autenticação
Todos os clusters Kubernetes possuem duas categorias de usuários: contas de serviço gerenciadas pelo Kubernetes e usuários normais.
Assume-se que um serviço independente do cluster gerencia usuários normais das seguintes formas:
Keystone é o serviço de identidade usado pelo OpenStack para autenticação (authN) e autorização de alto nível (authZ). Atualmente, ele oferece suporte a authN com base em token e autorização de serviço do usuário. Recentemente, foi reprojetado para permitir a expansão para oferecer suporte a serviços externos de proxy e mecanismos AuthN / AuthZ, como oAuth, SAML e openID em versões futuras.
ou Google AccountsNeste quesito, Kubernetes não possui objetos que possam representar as contas de um usuário normal. Usuários normais não podem ser adicionados ao cluster através de uma chamada para a API.
Apesar de um usuário normal não poder ser adicionado através de uma chamada para a API, qualquer usuário que apresente um certificado válido e assinado pela autoridade de certificados (CA) do cluster é considerado autenticado. Nesta configuração, Kubernetes determina o nome do usuário baseado no campo de nome comum no sujeito (subject) do certificado (por exemplo: "/CN=bob"). A partir daí, o subsistema de controle de acesso baseado em função (RBAC) determina se o usuário é autorizado a realizar uma operação específica sobre o recurso. Para mais detalhes, veja a referência sobre o tópico de usuários normais dentro de requisição de certificado.
Em contraste a usuários normais, contas de serviço são considerados usuários gerenciados pela API do Kubernetes. Elas estão vinculadas à namespaces específicas e criadas automaticamente pelo servidor de API ou manualmente através de chamadas da API. Contas de serviço estão ligadas a um conjunto de credenciais armazenados como Secrets, aos quais são montados dentro dos pods assim permitindo que processos internos ao cluster comuniquem-se com a API do Kubernetes.
Requisições para a API estão ligadas a um usuário normal, conta de serviço ou serão tratadas como requisições anônimas. Isto significa que cada processo dentro ou fora do cluster, desde um usuário humano utilizando o kubectl de uma estação de trabalho, a kubelets rodando nos nós, a membros da camada de gerenciamento (s/painel de controle) devem autenticar-se ao realizarem suas requisições para o servidor API ou serão tratados como usuário anônimo.
Kubernetes usa certificados de clientes, bearer Token, um proxy realizando autenticação, ou uma autenticação básica HTTP para autenticar requisições para o servidor de API através de plugins. Como requisições HTTP são feitas no servidor de API, plugins tentam associar os seguintes atributos junto a requisição:
Um nome de usuário é um nome que identifica exclusivamente alguém em um sistema de computador. Por exemplo, um computador pode ser configurado com várias contas, com nomes de usuário diferentes para cada conta. Muitos sites permitem que os usuários escolham um nome de usuário para que possam personalizar suas configurações ou configurar uma conta online. Por exemplo, seu banco pode permitir que você escolha um nome de usuário para acessar suas informações bancárias. Você pode precisar escolher um nome de usuário para postar mensagens em um determinado quadro de mensagens na web. Os serviços de e-mail, como o Hotmail, exigem que os usuários escolham um nome de usuário para usar o serviço.
Um nome de usuário geralmente é pareado com uma senha. Essa combinação de nome de usuário / senha é conhecida como login e geralmente é necessária para que os usuários façam login em sites. Por exemplo, para acessar seu e-mail pela Web, é necessário inserir seu nome de usuário e senha. Depois de fazer o login, seu nome de usuário pode aparecer na tela, mas sua senha é mantida em segredo. Ao manter sua senha privada, as pessoas podem criar contas seguras para vários sites. A maioria dos nomes de usuário pode conter letras e números, mas não espaços. Quando você escolhe um nome de usuário para uma conta de e-mail, a parte antes de "@" é o seu nome de usuário.
: um valor (String) que identifica o usuário final. Valores comuns podem serkube-admin ou jane@example.comUma string gerada pelos sistemas do Kubernetes para identificar objetos de forma única.
Cada objeto criado durante todo o ciclo de vida do cluster do Kubernetes possui um UID distinto. O objetivo deste identificador é distinguir ocorrências históricas de entidades semelhantes.
: um valor (String) que identifica o usuário final e tenta ser mais consistente e único do que username.system:masters ou devops-team.Todos os valores são transparentes para o sistema de autenticação e somente trazem significado quando interpretados por um autorizador.
É possível habilitar múltiplos métodos de autenticação. Deve-se normalmente usar pelo menos dois métodos:
Quando múltiplos módulos de autenticação estão habilitados, o primeiro módulo a autenticar com sucesso uma requisição termina, o fluxo de avaliação da mesma.
O servidor de API não garante a ordem em que os autenticadores são processados.
O grupo system:authenticated é incluído na lista de grupos de todos os usuários autenticados.
Integrações com outros protocolos de autenticação, como LDAP
Abreviatura para "Lightweight Directory Access Protocol". Se você deseja disponibilizar informações de diretório na Internet, esta é a maneira de fazê-lo. O LDAP é uma versão simplificada de um padrão de diretório anterior denominado X.500. O que torna o LDAP tão útil é que ele funciona muito bem em redes TCP / IP (ao contrário do X.500), de modo que as informações podem ser acessadas por meio do LDAP por qualquer pessoa com uma conexão à Internet. Também é um protocolo aberto, o que significa que os diretórios podem ser armazenados em qualquer tipo de máquina (por exemplo, Windows 2000, Red Hat Linux, Mac OS X).
Para dar uma ideia de como um diretório LDAP é organizado, aqui estão os diferentes níveis de uma hierarquia de árvore LDAP simples:
O diretório raiz Países Organizações Divisões, departamentos, etc. Indivíduos Recursos individuais, como arquivos e impressoras. A maior parte da conectividade LDAP é feita nos bastidores, então o usuário típico provavelmente não notará ao navegar na web. No entanto, é uma boa tecnologia para se conhecer. Se nada mais, é outro termo para impressionar seus pais.
, SAMLSAML significa Linguagem de Marcação para Asserção de Segurança. É um padrão aberto baseado em XML para transferência de dados de identidade entre duas partes: um provedor de identidade (IdP) e um provedor de serviços (SP).
Provedor de identidade - executa autenticação e passa a identidade do usuário e o nível de autorização para o provedor de serviços.
Provedor de serviços - confia no provedor de identidade e autoriza o usuário fornecido a acessar o recurso solicitado.
A autenticação de logon único SAML normalmente envolve um provedor de serviços e um provedor de identidade. O fluxo do processo geralmente envolve os estágios de estabelecimento de confiança e fluxo de autenticação.
Considere este exemplo:
Nosso provedor de identidade é Auth0 Nosso provedor de serviços é um serviço fictício, Zagadat Nota: O provedor de identidade pode ser qualquer plataforma de gerenciamento de identidade.
Agora, um usuário está tentando obter acesso ao Zagadat usando a autenticação SAML.
Este é o fluxo do processo:
O usuário tenta fazer login no Zagadat a partir de um navegador. O Zagadat responde gerando uma solicitação SAML.
, KerberosKerberos é um protocolo de rede que usa criptografia de chave secreta para autenticar aplicativos cliente-servidor. O Kerberos solicita um tíquete criptografado por meio de uma sequência de servidor autenticada para usar os serviços.
Kerberos foi desenvolvido pelo Project Athena - um projeto conjunto entre o Massachusetts Institute of Technology (MIT), Digital Equipment Corporation e IBM que funcionou entre 1983 e 1991.
Um servidor de autenticação usa um tíquete Kerberos para conceder acesso ao servidor e, em seguida, cria uma chave de sessão com base na senha do solicitante e outro valor aleatório. O tíquete de concessão de tíquete (TGT) é enviado ao servidor de concessão de tíquete (TGS), que é necessário para usar o mesmo servidor de autenticação.
O solicitante recebe uma chave TGS criptografada com um registro de data e hora e um tíquete de serviço, que é retornado ao solicitante e descriptografado. O solicitante envia ao TGS essas informações e encaminha a chave criptografada ao servidor para obter o serviço desejado. Se todas as ações forem tratadas corretamente, o servidor aceita o tíquete e realiza o atendimento ao usuário desejado, que deve descriptografar a chave, verificar a data e hora e entrar em contato com o centro de distribuição para obter as chaves de sessão. Essa chave de sessão é enviada ao solicitante, que descriptografa o tíquete.
Se as chaves e o carimbo de data / hora forem válidos, a comunicação cliente-servidor continuará. O tíquete TGS tem carimbo de data / hora, o que permite solicitações simultâneas dentro do período de tempo alocado.
, alternate x509 schemesX.509 é um formato padrão para certificados de chave pública, documentos digitais que associam com segurança pares de chaves criptográficas a identidades como sites, indivíduos ou organizações.
Introduzido pela primeira vez em 1988 junto com os padrões X.500 para serviços de diretório eletrônico, o X.509 foi adaptado para uso na Internet pelo grupo de trabalho Public-Key Infrastructure (X.509) (PKIX) da IETF. O RFC 5280 define o perfil do certificado X.509 v3, a lista de revogação de certificado X.509 v2 (CRL) e descreve um algoritmo para a validação do caminho do certificado X.509.
As aplicações comuns de certificados X.509 incluem:
- SSL / TLS e HTTPS para navegação na web autenticada e criptografada
- E-mail assinado e criptografado por meio do protocolo S / MIME
- Assinatura de código
- Assinatura de documento
- Autenticação de cliente
- Identificação eletrônica emitida pelo governo
, etc, podem ser alcançadas utilizando-se de um proxy ou webhook de autenticação.
Autenticação via certificados de cliente pode ser habilitada ao passar a opção --client-ca-file=ARQUIVO para o servidor de API. O arquivo referenciado deve conter um ou mais autoridades de certificação usadas para validar o certificado de cliente passado para o servidor de API. Se o certificado de cliente é apresentado e verificado, o common name
O nome comum é normalmente composto de Host + Nome de domínio e será semelhante a www.seusite.com ou seusite.com. Os certificados de servidor SSL são específicos para o nome comum para o qual foram emitidos no nível do host.
O nome comum deve ser igual ao endereço da Web que você acessará ao se conectar a um site seguro. Por exemplo, um certificado de servidor SSL para o domínio domínio.com receberá um aviso do navegador se o acesso a um site chamado www.domain.com ou secure.domain.com, pois www.domain.com e secure.domain.com são diferentes de dominio.com. Você precisaria criar um CSR para o nome comum correto.
do sujeito é usado como o nome de usuário para a requisição. A partir da versão 1.4, certificados de cliente podem também indicar o pertencimento de um usuário a um grupo utilizando o campo de organização do certificado. Para incluir múltiplos grupos para o usuário, deve-se incluir múltiplos campos de organização no certificado.Por exemplo, utilizando o comando de linha openssl para gerar uma requisição de assinatura de certificado:
openssl req -new -key jbeda.pem -out jbeda-csr.pem -subj "/CN=jbeda/O=app1/O=app2"
Isto criaria um arquivo de tipo CSR (requisição de assinatura de certificado) para o usuário "jbeda" pertencendo a dois grupos: "app1" e "app2".
Veja como gerar um certificado de cliente em Gerenciando Certificados
O servidor de API lê bearer tokens de um arquivo quando recebe uma requisição contendo a opção --token-auth-file=ARQUIVO via linha de comando. Atualmente, tokens têm duração indefinida, e a lista de tokens não pode ser modificada sem reiniciar o servidor de API.
O arquivo de token é do tipo CSV contendo no mínimo 3 colunas: token, nome de usuário, identificador de usuário (uid), seguido pelos nomes de grupos (opcional).
Se uma entrada possuir mais de um grupo, a coluna deve ser cercada por aspas duplas, por exemplo:
token,usuario,uid,"grupo1,grupo2,grupo3"
Quando utilizando-se de bearer token para autenticação de um cliente HTTP, o servidor de API espera um cabeçalho Authorization com um valor Bearer TOKEN. O token deve ser uma sequência de caracteres que pode ser colocada como valor em um cabeçalho HTTP não utilizando-se mais do que as facilidades de codificação e citação de HTTP. Por exemplo, se o valor de um token é 31ada4fd-adec-460c-809a-9e56ceb75269 então iria aparecer dentro de um cabeçalho HTTP como:
Authorization: Bearer 31ada4fd-adec-460c-809a-9e56ceb75269
Kubernetes v1.18 [stable]
Para permitir a inicialização simplificada para novos clusters, Kubernetes inclui um token dinamicamente gerenciado denominado Bootstrap Token. Estes tokens são armazenados como Secrets dentro do namespace kube-system, onde eles podem ser dinamicamente criados e gerenciados. O componente Gerenciador de Controle (Controller Manager) possui um controlador "TokenCleaner" que apaga os tokens de inicialização expirados.
Os tokens seguem o formato [a-z0-9]{6}.[a-z0-9]{16}. O primeiro componente é um identificador do token e o segundo é o segredo. Você pode especificar o token como um cabeçalho HTTP como:
Authorization: Bearer 781292.db7bc3a58fc5f07e
Deve-se habilitar os tokens de inicialização com a opção --enable-bootstrap-token-auth no servidor de API. Deve-se habilitar o controlador TokenCleaner através da opção --controllers no Gerenciador de Controle. Isso é feito, por exemplo, como: --controllers=*,tokencleaner. O kubeadm, por exemplo, irá realizar isso caso seja utilizado para a inicialização do cluster.
O autenticador o autentica como system:bootstrap:<Token ID> e é incluído no grupo system:bootstrappers. O nome e grupo são intencionalmente limitados para desencorajar usuários a usarem estes tokens após inicialização. Os nomes de usuários e grupos podem ser utilizados (e são utilizados pelo kubeadm) para elaborar as políticas de autorização para suportar a inicialização de um cluster.
Por favor veja Bootstrap Tokens para documentação detalhada sobre o autenticador e controladores de Token de inicialização, bem como gerenciar estes tokens com kubeadm.
Uma conta de serviço é um autenticador habilitado automaticamente que usa bearer tokens para verificar as requisições. O plugin aceita dois parâmetros opcionais:
--service-account-key-file Um arquivo contendo uma chave codificada no formato PEM para assinar bearer tokens. Se não especificado, a chave privada de TLS no servidor de API será utilizada--service-account-lookup Se habilitado, tokens deletados do servidor de API serão revogados.Contas de serviço são normalmente criadas automaticamente pelo servidor de API e associada a pods rodando no cluster através do controlador de admissão Admission Controller de ServiceAccount. Os tokens de contas de serviços são montados nos Pods, em localizações já pré definidas e conhecidas e permitem processos dentro do cluster a se comunicarem com o servidor de API. Contas podem ser explicitamente associadas com pods utilizando o campo serviceAccountName na especificação do pod (PodSpec):
serviceAccountName é normalmente omitida por ser feito automaticamenteapiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: default
spec:
replicas: 3
template:
metadata:
# ...
spec:
serviceAccountName: bob-the-bot
containers:
- name: nginx
image: nginx:1.14.2
Os tokens de contas de serviço são perfeitamente válidos para ser usados fora do cluster e podem ser utilizados para criar identidades para processos de longa duração que desejem comunicar-se com a API do Kubernetes. Para criar manualmente uma conta de serviço, utilize-se simplesmente o comando kubectl create serviceaccount (NOME). Isso cria uma conta de serviço e um segredo associado a ela no namespace atual.
kubectl create serviceaccount jenkins
serviceaccount "jenkins" created
Verificando um segredo associado:
kubectl get serviceaccounts jenkins -o yaml
apiVersion: v1
kind: ServiceAccount
metadata:
# ...
secrets:
- name: jenkins-token-1yvwg
O segredo criado irá armazenar a autoridade de certificado do servidor de API e um JSON Web Token (JWT) digitalmente assinado.
kubectl get secret jenkins-token-1yvwg -o yaml
apiVersion: v1
data:
ca.crt: (APISERVER'S CA BASE64 ENCODED)
namespace: ZGVmYXVsdA==
token: (BEARER TOKEN BASE64 ENCODED)
kind: Secret
metadata:
# ...
type: kubernetes.io/service-account-token
O JWT assinado pode ser usado como um bearer token para autenticar-se como a conta de serviço. Veja acima como o token pode ser incluído em uma requisição. Normalmente esses segredos são montados no pod para um acesso interno ao cluster ao servidor de API, porém pode ser utilizado fora do cluster também.
Contas de serviço são autenticadas com o nome de usuário system:serviceaccount:(NAMESPACE):(SERVICEACCOUNT) e são atribuídas aos grupos system:serviceaccounts e system:serviceaccounts:(NAMESPACE).
AVISO: porque os tokens das contas de serviço são armazenados em segredos, qualquer usuário com acesso de leitura a esses segredos podem autenticar-se como a conta de serviço. Tome cuidado quando conceder permissões a contas de serviços e capacidade de leitura de segredos.
OpenID Connect é uma variação do framework de autorização OAuth2 que suporta provedores como Azure Active Directory, Salesforce, e Google. A principal extensão do OAuth2 é um campo adicional de token de acesso chamado ID Token. Este token é um tipo de JSON Web Token (JWT) com campos bem definidos, como usuário, e-mail e é assinado pelo servidor de autorização.
Para identificar o usuário, o autenticador usa o id_token (e não access_token) do bearer token da resposta de autorização do OAuth2 token response. Veja acima como incluir um token em uma requisição.
access_token, id_token e um refresh_token.kubectl, utilize do seu id_token com a opção --token ou adicione o token diretamente no seu arquivo de configuração kubeconfig.kubectl envia o seu id_token em um cabeçalho HTTP chamado Authorization para o servidor de API.id_token não esteja expirado.kubectl.kubectl fornece retorno ao usuário.Uma vez que todos os dados necessários para determinar sua identidade encontram-se no id_token, Kubernetes não precisa realizar outra chamada para o provedor de identidade. Em um modelo onde cada requisição não possui estado, isso fornece uma solução escalável para autenticação. Isso, porem, apresenta alguns desafios:
id_token não pode ser revogado, funcionando como um certificado, portanto deve possuir curta validade (somente alguns minutos) o que pode tornar a experiência um pouco desconfortável, fazendo com que se requisite um novo token toda vez em um curto intervalo (poucos minutos de validade do token)kubectl proxy ou um proxy reverso que consiga injetar o id_token.Para habilitar o plugin de autorização, configure as seguintes opções no servidor de API:
| Parâmetro | Descrição | Exemplo | Obrigatório |
|---|---|---|---|
--oidc-issuer-url |
URL do provedor que permite ao servidor de API descobrir chaves públicas de assinatura. Somente URLs que usam o esquema https:// são aceitas. Isto normalmente é o endereço de descoberta do provedor sem o caminho, por exemplo "https://accounts.google.com" ou "https://login.salesforce.com". Esta URL deve apontar para o nível abaixo do caminho .well-known/openid-configuration |
Se o valor da URL de descoberta é https://accounts.google.com/.well-known/openid-configuration, entao o valor deve ser https://accounts.google.com |
Sim |
--oidc-client-id |
Identificador do cliente para o qual todos os tokens são gerados. | kubernetes | Sim |
--oidc-username-claim |
Atributo do JWT a ser usado como nome de usuário. Por padrão o valor sub, o qual é esperado que seja um identificador único do usuário final. Administradores podem escolher outro atributo, como email ou name, dependendo de seu provedor de identidade. No entanto, outros atributos além de email serão prefixados com a URL do emissor issuer URL para prevenir conflitos de nome com outros plugins. |
sub | Não |
--oidc-username-prefix |
Prefixos adicionados ao atributo de nome de usuário para prevenir conflitos de nomes existentes (como por exemplo usuários system:). Por exemplo, o valor oidc: irá criar usuários como oidc:jane.doe. Se esta opção não for fornecida --oidc-username-claim e um valor diferente de email irá conter um prefixo padrão com o valor de ( Issuer URL )# onde ( Issuer URL ) era o valor da opção --oidc-issuer-url. O valor - pode ser utilizado para desabilitar todos os prefixos. |
oidc: |
Não |
--oidc-groups-claim |
Atributo do JWT a ser utilizado para mapear os grupos dos usuários. Se o atributo está presente, ele deve ser do tipo vetor de Strings. | groups | Não |
--oidc-groups-prefix |
Prefixo adicionados ao atributo de grupo para prevenir conflitos de nomes existentes (como por exemplo system: grupos). Por exemplo, o valor oidc: irá criar nomes de grupos como oidc:engineering e oidc:infra. |
oidc: |
Não |
--oidc-required-claim |
Um par de chave=valor que descreve atributos obrigatórios no ID Token. Se configurado, a presença do atributo é verificado dentro do ID Token com um valor relacionado. Repita esta opção para configurar múltiplos atributos obrigatórios. | claim=value |
Não |
--oidc-ca-file |
O caminho para o arquivo de certificado da autoridade de certificados (CA) que assinou o certificado do provedor de identidades. | /etc/kubernetes/ssl/kc-ca.pem |
Não |
É importante ressaltar que o servidor de API não é um cliente Oauth2, ao contrário, ele só pode ser configurado para confiar em um emissor. Isso permite o uso de emissores públicos, como Google, sem confiar em credenciais emitidas por terceiros. Administradores que desejam utilizar-se de múltiplos clientes OAuth2 devem explorar provedores os quais suportam atributos azp (parte autorizada), que é um mecanismo para permitir um cliente a emitir tokens em nome de outro.
Kubernetes não oferece um provedor de identidade OpenID Connect. Pode-se utilizar provedores públicos existentes como Google ou outros. Ou, pode-se rodar o próprio provedor de identidade no cluster, como dex, Keycloak, CloudFoundry UAA, ou Tremolo Security's OpenUnison.
Para um provedor de identidades funcionar no Kubernetes, ele deve:
Uma nota sobre o requisito #3 acima. Se você instalar o seu próprio provedor de identidades (ao invés de utilizar um provedor como Google ou Microsoft) você DEVE ter o certificado web do seu provedor de identidades assinado por um certificado contendo a opção CA configurada para TRUE, mesmo que seja um certificado auto assinado. Isso deve-se a implementação do cliente TLS em Golang que é bastante restrito quanto aos padrões em torno da validação de certificados. Se você não possui um CA em fácil alcance, você pode usar este script criado pelo time Dex para criar um simples CA, um par de chaves e certificado assinados.
Ou você pode usar este script similar o qual gera certificados SHA256 com uma vida mais longa e tamanho maior de chave.
Instruções de configuração para sistemas específicos podem ser encontrados em:
A primeira opção é utilizar-se do autenticador oidc do kubectl, o qual define o valor do id_token como um bearer token para todas as requisições e irá atualizar o token quando o mesmo expirar. Após você efetuar o login no seu provedor, utilize o kubectl para adicionar os seus id_token, refresh_token, client_id, e client_secret para configurar o plugin.
Provedores os quais não retornem um id_token como parte da sua resposta de refresh token não são suportados por este plugin e devem utilizar a opção 2 abaixo.
kubectl config set-credentials USER_NAME \
--auth-provider=oidc \
--auth-provider-arg=idp-issuer-url=( issuer url ) \
--auth-provider-arg=client-id=( your client id ) \
--auth-provider-arg=client-secret=( your client secret ) \
--auth-provider-arg=refresh-token=( your refresh token ) \
--auth-provider-arg=idp-certificate-authority=( path to your ca certificate ) \
--auth-provider-arg=id-token=( your id_token )
Um exemplo, executando o comando abaixo após autenticar-se no seu provedor de identidades:
kubectl config set-credentials mmosley \
--auth-provider=oidc \
--auth-provider-arg=idp-issuer-url=https://oidcidp.tremolo.lan:8443/auth/idp/OidcIdP \
--auth-provider-arg=client-id=kubernetes \
--auth-provider-arg=client-secret=1db158f6-177d-4d9c-8a8b-d36869918ec5 \
--auth-provider-arg=refresh-token=q1bKLFOyUiosTfawzA93TzZIDzH2TNa2SMm0zEiPKTUwME6BkEo6Sql5yUWVBSWpKUGphaWpxSVAfekBOZbBhaEW+VlFUeVRGcluyVF5JT4+haZmPsluFoFu5XkpXk5BXqHega4GAXlF+ma+vmYpFcHe5eZR+slBFpZKtQA= \
--auth-provider-arg=idp-certificate-authority=/root/ca.pem \
--auth-provider-arg=id-token=eyJraWQiOiJDTj1vaWRjaWRwLnRyZW1vbG8ubGFuLCBPVT1EZW1vLCBPPVRybWVvbG8gU2VjdXJpdHksIEw9QXJsaW5ndG9uLCBTVD1WaXJnaW5pYSwgQz1VUy1DTj1rdWJlLWNhLTEyMDIxNDc5MjEwMzYwNzMyMTUyIiwiYWxnIjoiUlMyNTYifQ.eyJpc3MiOiJodHRwczovL29pZGNpZHAudHJlbW9sby5sYW46ODQ0My9hdXRoL2lkcC9PaWRjSWRQIiwiYXVkIjoia3ViZXJuZXRlcyIsImV4cCI6MTQ4MzU0OTUxMSwianRpIjoiMm96US15TXdFcHV4WDlHZUhQdy1hZyIsImlhdCI6MTQ4MzU0OTQ1MSwibmJmIjoxNDgzNTQ5MzMxLCJzdWIiOiI0YWViMzdiYS1iNjQ1LTQ4ZmQtYWIzMC0xYTAxZWU0MWUyMTgifQ.w6p4J_6qQ1HzTG9nrEOrubxIMb9K5hzcMPxc9IxPx2K4xO9l-oFiUw93daH3m5pluP6K7eOE6txBuRVfEcpJSwlelsOsW8gb8VJcnzMS9EnZpeA0tW_p-mnkFc3VcfyXuhe5R3G7aa5d8uHv70yJ9Y3-UhjiN9EhpMdfPAoEB9fYKKkJRzF7utTTIPGrSaSU6d2pcpfYKaxIwePzEkT4DfcQthoZdy9ucNvvLoi1DIC-UocFD8HLs8LYKEqSxQvOcvnThbObJ9af71EwmuE21fO5KzMW20KtAeget1gnldOosPtz1G5EwvaQ401-RPQzPGMVBld0_zMCAwZttJ4knw
O qual irá produzir a configuração abaixo:
users:
- name: mmosley
user:
auth-provider:
config:
client-id: kubernetes
client-secret: 1db158f6-177d-4d9c-8a8b-d36869918ec5
id-token: eyJraWQiOiJDTj1vaWRjaWRwLnRyZW1vbG8ubGFuLCBPVT1EZW1vLCBPPVRybWVvbG8gU2VjdXJpdHksIEw9QXJsaW5ndG9uLCBTVD1WaXJnaW5pYSwgQz1VUy1DTj1rdWJlLWNhLTEyMDIxNDc5MjEwMzYwNzMyMTUyIiwiYWxnIjoiUlMyNTYifQ.eyJpc3MiOiJodHRwczovL29pZGNpZHAudHJlbW9sby5sYW46ODQ0My9hdXRoL2lkcC9PaWRjSWRQIiwiYXVkIjoia3ViZXJuZXRlcyIsImV4cCI6MTQ4MzU0OTUxMSwianRpIjoiMm96US15TXdFcHV4WDlHZUhQdy1hZyIsImlhdCI6MTQ4MzU0OTQ1MSwibmJmIjoxNDgzNTQ5MzMxLCJzdWIiOiI0YWViMzdiYS1iNjQ1LTQ4ZmQtYWIzMC0xYTAxZWU0MWUyMTgifQ.w6p4J_6qQ1HzTG9nrEOrubxIMb9K5hzcMPxc9IxPx2K4xO9l-oFiUw93daH3m5pluP6K7eOE6txBuRVfEcpJSwlelsOsW8gb8VJcnzMS9EnZpeA0tW_p-mnkFc3VcfyXuhe5R3G7aa5d8uHv70yJ9Y3-UhjiN9EhpMdfPAoEB9fYKKkJRzF7utTTIPGrSaSU6d2pcpfYKaxIwePzEkT4DfcQthoZdy9ucNvvLoi1DIC-UocFD8HLs8LYKEqSxQvOcvnThbObJ9af71EwmuE21fO5KzMW20KtAeget1gnldOosPtz1G5EwvaQ401-RPQzPGMVBld0_zMCAwZttJ4knw
idp-certificate-authority: /root/ca.pem
idp-issuer-url: https://oidcidp.tremolo.lan:8443/auth/idp/OidcIdP
refresh-token: q1bKLFOyUiosTfawzA93TzZIDzH2TNa2SMm0zEiPKTUwME6BkEo6Sql5yUWVBSWpKUGphaWpxSVAfekBOZbBhaEW+VlFUeVRGcluyVF5JT4+haZmPsluFoFu5XkpXk5BXq
name: oidc
Uma vez que seu id_token expire, kubectl irá tentar atualizar o seu id_token utilizando-se do seu refresh_token e client_secret armazenando os novos valores para refresh_token e id_token no seu arquivo de configuração .kube/config.
--tokenO comando kubectl o permite passar o valor de um token utilizando a opção --token. Copie e cole o valor do seu id_token nesta opção:
kubectl --token=eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJodHRwczovL21sYi50cmVtb2xvLmxhbjo4MDQzL2F1dGgvaWRwL29pZGMiLCJhdWQiOiJrdWJlcm5ldGVzIiwiZXhwIjoxNDc0NTk2NjY5LCJqdGkiOiI2RDUzNXoxUEpFNjJOR3QxaWVyYm9RIiwiaWF0IjoxNDc0NTk2MzY5LCJuYmYiOjE0NzQ1OTYyNDksInN1YiI6Im13aW5kdSIsInVzZXJfcm9sZSI6WyJ1c2VycyIsIm5ldy1uYW1lc3BhY2Utdmlld2VyIl0sImVtYWlsIjoibXdpbmR1QG5vbW9yZWplZGkuY29tIn0.f2As579n9VNoaKzoF-dOQGmXkFKf1FMyNV0-va_B63jn-_n9LGSCca_6IVMP8pO-Zb4KvRqGyTP0r3HkHxYy5c81AnIh8ijarruczl-TK_yF5akjSTHFZD-0gRzlevBDiH8Q79NAr-ky0P4iIXS8lY9Vnjch5MF74Zx0c3alKJHJUnnpjIACByfF2SCaYzbWFMUNat-K1PaUk5-ujMBG7yYnr95xD-63n8CO8teGUAAEMx6zRjzfhnhbzX-ajwZLGwGUBT4WqjMs70-6a7_8gZmLZb2az1cZynkFRj2BaCkVT3A2RrjeEwZEtGXlMqKJ1_I2ulrOVsYx01_yD35-rw get nodes
Webhook de autenticação é usado para verificar bearer tokens
--authentication-token-webhook-config-file arquivo de configuração descrevendo como acessar o serviço remoto de webhook.--authentication-token-webhook-cache-ttl por quanto tempo guardar em cache decisões de autenticação. Configuração padrão definida para dois minutos.--authentication-token-webhook-version determina quando usar o apiVersion authentication.k8s.io/v1beta1 ou authentication.k8s.io/v1 para objetos TokenReview quando enviar/receber informações do webhook. Valor padrão v1beta1.O arquivo de configuração usa o formato de arquivo do kubeconfig. Dentro do arquivo, clusters refere-se ao serviço remoto e users refere-se ao servidor de API do webhook. Um exemplo seria:
# versão da API do Kubernetes
apiVersion: v1
# tipo do objeto da API
kind: Config
# clusters refere-se ao serviço remoto
clusters:
- name: name-of-remote-authn-service
cluster:
certificate-authority: /path/to/ca.pem # CA para verificar o serviço remoto
server: https://authn.example.com/authenticate # URL para procurar o serviço remoto. Deve utilizar 'https'.
# users refere-se a configuração do webhook do servidor de API
users:
- name: name-of-api-server
user:
client-certificate: /path/to/cert.pem # certificado para ser utilizado pelo plugin de webhook
client-key: /path/to/key.pem # chave referente ao certificado
# arquivos kubeconfig requerem um contexto. Especifique um para o servidor de API.
current-context: webhook
contexts:
- context:
cluster: name-of-remote-authn-service
user: name-of-api-server
name: webhook
Quando um cliente tenta autenticar-se com o servidor de API utilizando um bearer token como discutido acima, o webhook de autenticação envia um objeto JSON serializado do tipo TokenReview contendo o valor do token para o serviço remoto.
Note que objetos de API do tipo webhook estão sujeitos às mesmas regras de compatibilidade de versão como outros objetos de API Kubernetes.
Implementadores devem verificar o campo de versão da API (apiVersion) da requisição para garantir a correta deserialização e devem responder com um objeto do tipo TokenReview da mesma versão da requisição.
O servidor de API Kubernetes envia por padrão revisão de tokens para a API authentication.k8s.io/v1beta1 para fins de compatibilidade com versões anteriores.
Para optar receber revisão de tokens de versão authentication.k8s.io/v1, o servidor de API deve ser inicializado com a opção --authentication-token-webhook-version=v1.
{
"apiVersion": "authentication.k8s.io/v1",
"kind": "TokenReview",
"spec": {
# Bearer token opaco enviado para o servidor de API
"token": "014fbff9a07c...",
# Lista opcional de identificadores de audiência para o servidor ao qual o token foi apresentado
# Autenticadores de token sensíveis a audiência (por exemplo, autenticadores de token OIDC)
# deve-se verificar que o token foi direcionado a pelo menos um membro da lista de audiência
# e retornar a interseção desta lista a audiência válida para o token no estado da resposta
# Isto garante com que o token é válido para autenticar-se no servidor ao qual foi apresentado
# Se nenhuma audiência for especificada, o token deve ser validado para autenticar-se ao servidor de API do Kubernetes
"audiences": ["https://myserver.example.com", "https://myserver.internal.example.com"]
}
}
{
"apiVersion": "authentication.k8s.io/v1beta1",
"kind": "TokenReview",
"spec": {
# Bearer token opaco enviado para o servidor de API
"token": "014fbff9a07c...",
# Lista opcional de identificadores de audiência para o servidor ao qual o token foi apresentado
# Autenticadores de token sensíveis a audiência (por exemplo, autenticadores de token OIDC)
# deve-se verificar que o token foi direcionado a pelo menos um membro da lista de audiência
# e retornar a interseção desta lista a audiência válida para o token no estado da resposta
# Isto garante com que o token é válido para autenticar-se no servidor ao qual foi apresentado
# Se nenhuma audiência for especificada, o token deve ser validado para autenticar-se ao servidor de API do Kubernetes
"audiences": ["https://myserver.example.com", "https://myserver.internal.example.com"]
}
}
É esperado que o serviço remoto preencha o campo status da requisição para indicar o sucesso do login.
O campo spec do corpo de resposta é ignorado e pode ser omitido.
O serviço remoto deverá retornar uma resposta usando a mesma versão de API do objeto TokenReview que foi recebido.
Uma validação bem sucedida deveria retornar:
{
"apiVersion": "authentication.k8s.io/v1",
"kind": "TokenReview",
"status": {
"authenticated": true,
"user": {
# Obrigatório
"username": "janedoe@example.com",
# Opcional
"uid": "42",
# Opcional: lista de grupos associados
"groups": ["developers", "qa"],
# Opcional: informação adicional provida pelo autenticador.
# Isto não deve conter dados confidenciais, pois pode ser registrados em logs ou em objetos de API e estarão disponíveis para webhooks de admissão
"extra": {
"extrafield1": [
"extravalue1",
"extravalue2"
]
}
},
# Lista opcional de Autenticadores de token sensíveis a audiência que podem ser retornados,
# contendo as audiências da lista `spec.audiences` válido para o token apresentado.
# Se este campo for omitido, o token é considerado válido para autenticar-se no servidor de API Kubernetes
"audiences": ["https://myserver.example.com"]
}
}
{
"apiVersion": "authentication.k8s.io/v1beta1",
"kind": "TokenReview",
"status": {
"authenticated": true,
"user": {
# Obrigatório
"username": "janedoe@example.com",
# Opcional
"uid": "42",
# Opcional: lista de grupos associados
"groups": ["developers", "qa"],
# Opcional: informação adicional provida pelo autenticador.
# Isto não deve conter dados confidenciais, pois pode ser registrados em logs ou em objetos de API e estarão disponíveis para webhooks de admissão
"extra": {
"extrafield1": [
"extravalue1",
"extravalue2"
]
}
},
# Lista opcional de Autenticadores de token sensíveis a audiência que podem ser retornados,
# contendo as audiências da lista `spec.audiences` válido para o token apresentado.
# Se este campo for omitido, o token é considerado válido para autenticar-se no servidor de API Kubernetes
"audiences": ["https://myserver.example.com"]
}
}
Uma requisição mal sucedida retornaria:
{
"apiVersion": "authentication.k8s.io/v1",
"kind": "TokenReview",
"status": {
"authenticated": false,
# Opcionalmente inclui detalhes sobre o porque a autenticação falhou
# Se nenhum erro é fornecido, a API irá retornar uma mensagem genérica de "Não autorizado"
# O campo de erro é ignorado quando authenticated=true.
"error": "Credenciais expiradas"
}
}
{
"apiVersion": "authentication.k8s.io/v1beta1",
"kind": "TokenReview",
"status": {
"authenticated": false,
# Opcionalmente inclui detalhes sobre o porque a autenticação falhou
# Se nenhum erro é fornecido, a API irá retornar uma mensagem genérica de "Não autorizado"
# O campo de erro é ignorado quando authenticated=true.
"error": "Credenciais expiradas"
}
}
O servidor de API pode ser configurado para identificar usuários através de valores de cabeçalho de requisição, como por exemplo X-Remote-User.
Isto é projetado para o uso em combinação com um proxy de autenticação, o qual irá atribuir o valor do cabeçalho da requisição.
--requestheader-username-headers Obrigatório, não faz distinção entre caracteres maiúsculos/minúsculos. Nomes de cabeçalhos a serem verificados, em ordem, para a identidade do usuário. O primeiro cabeçalho contendo um valor será usado para o nome do usuário.
--requestheader-group-headers 1.6+. Opcional, não faz distinção entre caracteres maiúsculos/minúsculos. "X-Remote-Group" é recomendado. Nomes de cabeçalhos a serem verificados, em ordem, para os grupos do usuário. Todos os valores especificados em todos os cabeçalhos serão utilizados como nome dos grupos do usuário.
--requestheader-extra-headers-prefix 1.6+. Opcional, não faz distinção entre caracteres maiúsculos/minúsculos. "X-Remote-Extra-" é recomendado. Prefixos de cabeçalhos para serem utilizados para definir informações extras sobre o usuário (normalmente utilizado por um plugin de autorização). Todos os cabeçalhos que começam com qualquer um dos prefixos especificados têm o prefixo removido. O restante do nome do cabeçalho é transformado em letra minúscula, decodificado percent-decoded e torna-se uma chave extra, e o valor do cabeçalho torna-se um valor extra.
Por exemplo, com esta configuração:
--requestheader-username-headers=X-Remote-User
--requestheader-group-headers=X-Remote-Group
--requestheader-extra-headers-prefix=X-Remote-Extra-
e esta requisição:
GET / HTTP/1.1
X-Remote-User: fido
X-Remote-Group: dogs
X-Remote-Group: dachshunds
X-Remote-Extra-Acme.com%2Fproject: some-project
X-Remote-Extra-Scopes: openid
X-Remote-Extra-Scopes: profile
resultaria nesta informação de usuário:
name: fido
groups:
- dogs
- dachshunds
extra:
acme.com/project:
- some-project
scopes:
- openid
- profile
Para prevenir falsificação de cabeçalhos, o proxy de autenticação deverá apresentar um certificado de cliente válido para o servidor de API para que possa ser validado com a autoridade de certificados (CA) antes que os cabeçalhos de requisições sejam verificados. AVISO: não re-utilize uma autoridade de certificados (CA) que esteja sendo utilizado em um contexto diferente ao menos que você entenda os riscos e os mecanismos de proteção da utilização de uma autoridade de certificados.
--requestheader-client-ca-file Obrigatório. Pacote de certificados no formato PEM. Um certificado válido deve ser apresentado e validado com a autoridade de certificados no arquivo especificado antes da verificação de cabeçalhos de requisição para os nomes do usuário.
--requestheader-allowed-names Opcional. Lista de valores de nomes comuns (CNs). Se especificado, um certificado de cliente válido contendo uma lista de nomes comuns denominados deve ser apresentado na verificação de cabeçalhos de requisição para os nomes do usuário. Se vazio, qualquer valor de nomes comuns será permitido.
Quando habilitado, requisições que não são rejeitadas por outros métodos de autenticação configurados são tratadas como requisições anônimas e são dadas o nome de usuário system:anonymous e filiação ao grupo system:unauthenticated.
Por exemplo, uma requisição especificando um bearer token invalido chega a um servidor com token de autenticação configurado e acesso anônimo habilitado e receberia um erro de acesso não autorizado 401 Unauthorized. Já uma requisição não especificando nenhum bearer token seria tratada como uma requisição anônima.
Nas versões 1.5.1-1.5.x, acesso anônimo é desabilitado por padrão e pode ser habilitado passando a opção --anonymous-auth=true durante a inicialização do servidor de API.
Na versão 1.6 e acima, acesso anônimo é habilitado por padrão se um modo de autorização diferente de AlwaysAllow é utilizado e pode ser desabilitado passando a opção --anonymous-auth=false durante a inicialização do servidor de API.
Começando na versão 1.6, os autorizadores ABAC (Controle de Acesso Baseado em Atributos) e RBAC (Controle de Acesso Baseado em Função) requerem autorização explícita do usuário system:anonymous e do grupo system:unauthenticated, portanto, regras de políticas legadas que permitam acesso a usuário * e grupo * nao incluíram usuários anônimos.
Um usuário pode agir como outro através de cabeçalhos de personificação. Os mesmos permitem que requisições manualmente sobrescrevam as informações ao quais o usuário irá se autenticar como. Por exemplo, um administrador pode utilizar-se desta funcionalidade para investigar um problema com uma política de autorização e assim, temporariamente, personificar um outro usuário e ver se/como sua requisição está sendo negada.
Requisições de personificação primeiramente são autenticadas como o usuário requerente, então trocando para os detalhes de informação do usuário personificado.
O fluxo é:
Os seguintes cabeçalhos HTTP podem ser usados para realizar uma requisição de personificação:
Impersonate-User: O nome do usuário para se executar ações em seu nome.Impersonate-Group: Um nome de grupo para se executar ações em seu nome. Pode ser especificado múltiplas vezes para fornecer múltiplos grupos. Opcional. Requer "Impersonate-User".Impersonate-Extra-( extra name ): Um cabeçalho dinâmico usado para associar campos extras do usuário. Opcional. Requer "Impersonate-User". Para que seja preservado consistentemente, ( extra name ) deve ser somente minúsculo, e qualquer caracter que não seja legal em rótulos de cabeçalhos HTTP DEVE ser utf8 e codificado.( extra name ) só poderia conter caracteres que fossem legais em rótulos de cabeçalhos HTTP.Um exemplo de conjunto de cabeçalhos HTTP:
Impersonate-User: jane.doe@example.com
Impersonate-Group: developers
Impersonate-Group: admins
Impersonate-Extra-dn: cn=jane,ou=engineers,dc=example,dc=com
Impersonate-Extra-acme.com%2Fproject: some-project
Impersonate-Extra-scopes: view
Impersonate-Extra-scopes: development
Quando utilizando-se o kubectl especifique a opção --as para determinar o cabeçalho Impersonate-User, especifique a opção --as-group para determinar o cabeçalho Impersonate-Group.
kubectl drain mynode
Error from server (Forbidden): User "clark" cannot get nodes at the cluster scope. (get nodes mynode)
Especificando as opções --as e --as-group:
kubectl drain mynode --as=superman --as-group=system:masters
node/mynode cordoned
node/mynode drained
Para personificar um usuário, grupo ou especificar campos extras, o usuário efetuando a personificação deve possuir a permissão de executar o verbo "impersonate" no tipo de atributo sendo personificado ("user", "group", etc.). Para clusters com o plugin de autorização RBAC habilitados, a seguinte ClusterRole abrange as regras necessárias para definir os cabeçalhos de personificação de usuário e grupo:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: impersonator
rules:
- apiGroups: [""]
resources: ["users", "groups", "serviceaccounts"]
verbs: ["impersonate"]
Campos extras são avaliados como sub-recursos de um recurso denominado "userextras". Para permitir ao usuário que utilize os cabeçalhos de personificação para o campo extra "scopes", o usuário deve receber a seguinte permissão:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: scopes-impersonator
rules:
# Pode definir o cabeçalho "Impersonate-Extra-scopes".
- apiGroups: ["authentication.k8s.io"]
resources: ["userextras/scopes"]
verbs: ["impersonate"]
Os valores dos cabeçalhos de personificação podem também ser restringidos ao limitar o conjunto de nomes de recursos (resourceNames) que um recurso pode ter.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: limited-impersonator
rules:
# Pode personificar o usuário "jane.doe@example.com"
- apiGroups: [""]
resources: ["users"]
verbs: ["impersonate"]
resourceNames: ["jane.doe@example.com"]
# Pode assumir os grupos "developers" and "admins"
- apiGroups: [""]
resources: ["groups"]
verbs: ["impersonate"]
resourceNames: ["developers","admins"]
# Pode personificar os campos extras "scopes" com valores "view" e "development"
- apiGroups: ["authentication.k8s.io"]
resources: ["userextras/scopes"]
verbs: ["impersonate"]
resourceNames: ["view", "development"]
Kubernetes v1.11 [beta]
Ferramentas como kubectl e kubelet utilizando-se do k8s.io/client-go são capazes de executar um comando externo para receber credenciais de usuário.
Esta funcionalidade é direcionada à integração do lado cliente, com protocolos de autenticação não suportados nativamente pelo k8s.io/client-go como: LDAP, Kerberos, OAuth2, SAML, etc. O plugin implementa a lógica específica do protocolo e então retorna credenciais opacas para serem utilizadas. Quase todos os casos de usos de plugins de credenciais requerem um componente de lado do servidor com suporte para um autenticador de token webhook para interpretar o formato das credenciais produzidas pelo plugin cliente.
Num caso de uso hipotético, uma organização executaria um serviço externo que efetuaria a troca de credenciais LDAP por tokens assinados para um usuário específico. Este serviço seria também capaz de responder requisições do autenticador de token webhook para validar tokens. Usuários seriam obrigados a instalar um plugin de credencial em sua estação de trabalho.
Para autenticar na API:
kubectl.TokenReview para o serviço externo.plugins de credencial são configurados através de arquivos de configuração do kubectl como parte dos campos de usuário.
apiVersion: v1
kind: Config
users:
- name: my-user
user:
exec:
# Comando a ser executado. Obrigatório.
command: "example-client-go-exec-plugin"
# Versão da API a ser utilizada quando decodificar o recurso ExecCredentials. Obrigatório
#
# A versão da API retornada pelo plugin DEVE ser a mesma versão listada aqui.
#
# Para integrar com ferramentas que suportem múltiplas versões (tal como client.authentication.k8s.io/v1alpha1),
# defina uma variável de ambiente ou passe um argumento para a ferramenta que indique qual versão o plugin de execução deve esperar.
apiVersion: "client.authentication.k8s.io/v1beta1"
# Variáveis de ambiente a serem configuradas ao executar o plugin. Opcional
env:
- name: "FOO"
value: "bar"
# Argumentos a serem passados ao executar o plugin. Opcional
args:
- "arg1"
- "arg2"
# Texto exibido para o usuário quando o executável não parece estar presente. Opcional
installHint: |
example-client-go-exec-plugin é necessário para autenticar no cluster atual. Pode ser instalado via:
Em macOS: brew install example-client-go-exec-plugin
Em Ubuntu: apt-get install example-client-go-exec-plugin
Em Fedora: dnf install example-client-go-exec-plugin
...
# Deve-se ou não fornecer informações do cluster, que podem potencialmente conter grande quantidade de dados do CA,
# para esse plugin de execução como parte da variável de ambiente KUBERNETES_EXEC_INFO
provideClusterInfo: true
clusters:
- name: my-cluster
cluster:
server: "https://172.17.4.100:6443"
certificate-authority: "/etc/kubernetes/ca.pem"
extensions:
- name: client.authentication.k8s.io/exec # nome de extensão reservado para configuração exclusiva do cluster
extension:
arbitrary: config
this: pode ser fornecido através da variável de ambiente KUBERNETES_EXEC_INFO na configuração de provideClusterInfo
you: ["coloque", "qualquer", "coisa", "aqui"]
contexts:
- name: my-cluster
context:
cluster: my-cluster
user: my-user
current-context: my-cluster
Os caminhos relativos do comando são interpretados como relativo ao diretório do arquivo de configuração. Se
KUBECONFIG está configurado para o caminho /home/jane/kubeconfig e o comando executado é ./bin/example-client-go-exec-plugin,
o binario /home/jane/bin/example-client-go-exec-plugin será executado.
- name: my-user
user:
exec:
# Caminho relativo para o diretorio do kubeconfig
command: "./bin/example-client-go-exec-plugin"
apiVersion: "client.authentication.k8s.io/v1beta1"
O comando executado imprime um objeto ExecCredential para o stdout. k8s.io/client-go
autentica na API do Kubernetes utilizando as credenciais retornadas no status.
Quando executando uma sessão interativa, stdin é exposto diretamente para o plugin. plugins devem utilizar
um TTY check para determinar se é
apropriado solicitar um usuário interativamente.
Para usar credenciais do tipo bearer token, o plugin retorna um token no status do objeto ExecCredential.
{
"apiVersion": "client.authentication.k8s.io/v1beta1",
"kind": "ExecCredential",
"status": {
"token": "my-bearer-token"
}
}
Alternativamente, um certificado de cliente e chave codificados em PEM podem ser retornados para serem utilizados em autenticação de cliente TLS.
Se o plugin retornar um certificado e chave diferentes numa chamada subsequente, k8s.io/client-go
Irá fechar conexões existentes com o servidor para forçar uma nova troca TLS.
Se especificado, clientKeyData e clientCertificateData devem ambos estar presentes.
clientCertificateData pode conter certificados intermediários adicionais a serem enviados para o servidor.
{
"apiVersion": "client.authentication.k8s.io/v1beta1",
"kind": "ExecCredential",
"status": {
"clientCertificateData": "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----",
"clientKeyData": "-----BEGIN RSA PRIVATE KEY-----\n...\n-----END RSA PRIVATE KEY-----"
}
}
Opcionalmente, a resposta pode incluir a validade da credencial em formato RFC3339 de data/hora. A presença ou ausência de validade pode ter o seguinte impacto:
Se uma validade está incluída, o bearer token e as credenciais TLS são guardadas em cache até a o tempo de expiração é atingido ou se o servidor responder com um codigo de status HTTP 401 ou se o processo terminar.
Se uma validate está ausente, o bearer token e as credenciais TLS são guardadas em cache até o servidor responder com um código de status HTTP 401 ou até o processo terminar.
{
"apiVersion": "client.authentication.k8s.io/v1beta1",
"kind": "ExecCredential",
"status": {
"token": "my-bearer-token",
"expirationTimestamp": "2018-03-05T17:30:20-08:00"
}
}
Para habilitar o plugin de execução para obter informações específicas do cluster, define provideClusterInfo no campo user.exec
dentro do arquivo de configuração kubeconfig.
O plugin irá então prover a variável de ambiente KUBERNETES_EXEC_INFO.
As informações desta variável de ambiente podem ser utilizadas para executar lógicas de aquisição
de credentiais específicas do cluster.
O manifesto ExecCredential abaixo descreve um exemplo de informação de cluster.
{
"apiVersion": "client.authentication.k8s.io/v1beta1",
"kind": "ExecCredential",
"spec": {
"cluster": {
"server": "https://172.17.4.100:6443",
"certificate-authority-data": "LS0t...",
"config": {
"arbitrary": "config",
"this": "pode ser fornecido por meio da variável de ambiente KUBERNETES_EXEC_INFO na configuração de provideClusterInfo",
"you": ["coloque", "qualquer", "coisa", "aqui"]
}
}
}
}
Kubernetes v1.18 [stable]
Os tokens de inicialização são um bearer token simples que devem ser utilizados
ao criar novos clusters ou para quando novos nós são registrados a clusters existentes. Eles foram construídos
para suportar a ferramenta kubeadm, mas podem ser utilizados em outros contextos para usuários que desejam inicializar clusters sem utilizar o kubeadm.
Foram também construídos para funcionar, via políticas RBAC, com o sistema de Inicialização do Kubelet via TLS.
Os tokens de inicialização são definidos com um tipo especifico de secrets (bootstrap.kubernetes.io/token) que existem no namespace kube-system. Estes secrets são então lidos pelo autenticador de inicialização do servidor de API.
Tokens expirados são removidos pelo controlador TokenCleaner no gerenciador de controle - kube-controller-manager.
Os tokens também são utilizados para criar uma assinatura para um ConfigMap específico usado no processo de descoberta através de um controlador denominado BootstrapSigner.
Tokens de inicialização tem o formato abcdef.0123456789abcdef. Mais formalmente, eles devem corresponder a expressão regular [a-z0-9]{6}\.[a-z0-9]{16}.
A primeira parte do token é um identificador ("Token ID") e é considerado informação pública. Ele é utilizado para se referir a um token sem vazar a parte secreta usada para autenticação. A segunda parte é o secret do token e somente deve ser compartilhado com partes confiáveis.
O autenticador de tokens de inicialização pode ser habilitado utilizando a seguinte opção no servidor de API:
--enable-bootstrap-token-auth
Quando habilitado, tokens de inicialização podem ser utilizado como credenciais bearer token para autenticar requisições no servidor de API.
Authorization: Bearer 07401b.f395accd246ae52d
Tokens são autenticados como o usuário system:bootstrap:<token id> e são membros
do grupo system:bootstrappers. Grupos adicionais podem ser
especificados dentro do secret do token.
Tokens expirados podem ser removidos automaticamente ao habilitar o controlador tokencleaner
do gerenciador de controle - kube-controller-manager.
--controllers=*,tokencleaner
Cada token válido possui um secret no namespace kube-system. Você pode
encontrar a documentação completa aqui.
Um secret de token se parece com o exemplo abaixo:
apiVersion: v1
kind: Secret
metadata:
# Nome DEVE seguir o formato "bootstrap-token-<token id>"
name: bootstrap-token-07401b
namespace: kube-system
# Tipo DEVE ser 'bootstrap.kubernetes.io/token'
type: bootstrap.kubernetes.io/token
stringData:
# Descrição legível. Opcional.
description: "The default bootstrap token generated by 'kubeadm init'."
# identificador do token e _secret_. Obrigatório.
token-id: 07401b
token-secret: f395accd246ae52d
# Validade. Opcional.
expiration: 2017-03-10T03:22:11Z
# Usos permitidos.
usage-bootstrap-authentication: "true"
usage-bootstrap-signing: "true"
# Grupos adicionais para autenticar o token. Devem começar com "system:bootstrappers:"
auth-extra-groups: system:bootstrappers:worker,system:bootstrappers:ingress
O tipo do secret deve ser bootstrap.kubernetes.io/token e o nome deve seguir o formato bootstrap-token-<token id>. Ele também tem que existir no namespace kube-system.
Os membros listados em usage-bootstrap-* indicam qual a intenção de uso deste secret. O valor true deve ser definido para que seja ativado.
usage-bootstrap-authentication indica que o token pode ser utilizado para autenticar no servidor de API como um bearer token.usage-bootstrap-signing indica que o token pode ser utilizado para assinar o ConfigMap cluster-info como descrito abaixo.O campo expiration controla a expiração do token. Tokens expirados são
rejeitados quando usados para autenticação e ignorados durante assinatura de ConfigMaps.
O valor de expiração é codificado como um tempo absoluto UTC utilizando a RFC3339. Para automaticamente
remover tokens expirados basta habilitar o controlador tokencleaner.
Você pode usar a ferramenta kubeadm para gerenciar tokens em um cluster. Veja documentação de tokens kubeadm para mais detalhes.
Além de autenticação, os tokens podem ser utilizados para assinar um ConfigMap. Isto pode ser utilizado em estágio inicial do processo de inicialização de um cluster, antes que o cliente confie no servidor de API. O Configmap assinado pode ser autenticado por um token compartilhado.
Habilite a assinatura de ConfigMap ao habilitar o controlador bootstrapsigner no gerenciador de controle - kube-controller-manager.
--controllers=*,bootstrapsigner
O ConfigMap assinado é o cluster-info no namespace kube-public.
No fluxo típico, um cliente lê o ConfigMap enquanto ainda não autenticado
e ignora os erros da camada de transporte seguro (TLS).
Ele então valida o conteúdo do ConfigMap ao verificar a assinatura contida no ConfigMap.
O ConfigMap pode se parecer com o exemplo abaixo:
apiVersion: v1
kind: ConfigMap
metadata:
name: cluster-info
namespace: kube-public
data:
jws-kubeconfig-07401b: eyJhbGciOiJIUzI1NiIsImtpZCI6IjA3NDAxYiJ9..tYEfbo6zDNo40MQE07aZcQX2m3EB2rO3NuXtxVMYm9U
kubeconfig: |
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: <really long certificate data>
server: https://10.138.0.2:6443
name: ""
contexts: []
current-context: ""
kind: Config
preferences: {}
users: []
O membro kubeconfig do ConfigMap é um arquivo de configuração contendo somente
as informações do cluster preenchidas. A informação chave sendo comunicada aqui
está em certificate-authority-data. Isto poderá ser expandido no futuro.
A assinatura é feita utilizando-se assinatura JWS em modo "separado". Para validar
a assinatura, o usuário deve codificar o conteúdo do kubeconfig de acordo com as regras do JWS
(codificando em base64 e descartando qualquer = ao final). O conteúdo codificado
e então usado para formar um JWS inteiro, inserindo-o entre os 2 pontos. Você pode
verificar o JWS utilizando o esquema HS256 (HMAC-SHA256) com o token completo
(por exemplo: 07401b.f395accd246ae52d) como o secret compartilhado. Usuários devem
verificar que o algoritmo HS256 (que é um método de assinatura simétrica) está sendo utilizado.
Consulte a seção de detalhes de implementação do kubeadm para mais informações.
O Kubeadm é uma ferramenta criada para fornecer o kubeadm init e o kubeadm join como "caminhos rápidos" de melhores práticas para criar clusters Kubernetes.
O kubeadm executa as ações necessárias para colocar um cluster minimamente viável em funcionamento, e foi projetado para se preocupar apenas com a inicialização e não com o provisionamento de máquinas. Da mesma forma, a instalação de vários complementos úteis, como o Kubernetes Dashboard, soluções de monitoramento e complementos específicos da nuvem, não está no escopo.
Em vez disso, esperamos que ferramentas de alto nível e mais personalizadas sejam construídas em cima do kubeadm e, idealmente, usando o kubeadm como base de todas as implantações torná mais fácil a criação de clusters em conformidade.
Para instalar o kubeadm, consulte o guia de instalação.
worker do Kubernetes e associá-lo ao clusterkubeadm upgradekubeadm joinkubeadm init ou kubeadm joinEste comando inicializa um nó da camada de gerenciamento do Kubernetes.
Rode este comando para configurar a camada de gerenciamento do Kubernetes
Rode este comando para configurar a camada de gerenciamento do Kubernetes
O comando "init" executa as fases abaixo:
preflight Efetua as verificações pré-execução
certs Geração de certificados
/ca Gera a autoridade de certificação (CA) auto-assinada do Kubernetes para provisionamento de identidades para outros componentes do Kubernetes
/apiserver Gera o certificado para o servidor da API do Kubernetes
/apiserver-kubelet-client Gera o certificado para o servidor da API se conectar ao Kubelet
/front-proxy-ca Gera a autoridade de certificação (CA) auto-assinada para provisionamento de identidades para o front proxy
/front-proxy-client Gera o certificado para o cliente do front proxy
/etcd-ca Gera a autoridade de certificação (CA) auto-assinada para provisionamento de identidades para o etcd
/etcd-server Gera o certificado para servir o etcd
/etcd-peer Gera o certificado para comunicação entre nós do etcd
/etcd-healthcheck-client Gera o certificado para liveness probes fazerem a verificação de integridade do etcd
/apiserver-etcd-client Gera o certificado que o servidor da API utiliza para comunicar-se com o etcd
/sa Gera uma chave privada para assinatura de tokens de conta de serviço, juntamente com sua chave pública
kubeconfig Gera todos os arquivos kubeconfig necessários para estabelecer a camada de gerenciamento e o arquivo kubeconfig de administração
/admin Gera um arquivo kubeconfig para o administrador e o próprio kubeadm utilizarem
/kubelet Gera um arquivo kubeconfig para o kubelet utilizar *somente* para fins de inicialização do cluster
/controller-manager Gera um arquivo kubeconfig para o gerenciador de controladores utilizar
/scheduler Gera um arquivo kubeconfig para o escalonador do Kubernetes utilizar
kubelet-start Escreve as configurações do kubelet e (re)inicializa o kubelet
control-plane Gera todos os manifestos de Pods estáticos necessários para estabelecer a camada de gerenciamento
/apiserver Gera o manifesto do Pod estático do kube-apiserver
/controller-manager Gera o manifesto do Pod estático do kube-controller-manager
/scheduler Gera o manifesto do Pod estático do kube-scheduler
etcd Gera o manifesto do Pod estático para um etcd local
/local Gera o manifesto do Pod estático para uma instância local e de nó único do etcd
upload-config Sobe a configuração do kubeadm e do kubelet para um ConfigMap
/kubeadm Sobe a configuração ClusterConfiguration do kubeadm para um ConfigMap
/kubelet Sobe a configuração do kubelet para um ConfigMap
upload-certs Sobe os certificados para o kubeadm-certs
mark-control-plane Marca um nó como parte da camada de gerenciamento
bootstrap-token Gera tokens de autoinicialização utilizados para associar um nó a um cluster
kubelet-finalize Atualiza configurações relevantes ao kubelet após a inicialização TLS
/experimental-cert-rotation Habilita rotação de certificados do cliente do kubelet
addon Instala os addons requeridos para passar nos testes de conformidade
/coredns Instala o addon CoreDNS em um cluster Kubernetes
/kube-proxy Instala o addon kube-proxy em um cluster Kubernetes
kubeadm init [flags]
| --apiserver-advertise-address string | |
O endereço IP que o servidor da API irá divulgar que está escutando. Quando não informado, a interface de rede padrão é utilizada. |
|
| --apiserver-bind-port int32 Padrão: 6443 | |
Porta para o servidor da API conectar-se. |
|
| --apiserver-cert-extra-sans strings | |
Nomes alternativos (Subject Alternative Names, ou SANs) opcionais a serem adicionados ao certificado utilizado pelo servidor da API. Pode conter endereços IP ou nomes DNS. |
|
| --cert-dir string Padrão: "/etc/kubernetes/pki" | |
O caminho para salvar e armazenar certificados. |
|
| --certificate-key string | |
Chave utilizada para encriptar os certificados da camada de gerenciamento no Secret kubeadm-certs. |
|
| --config string | |
Caminho para um arquivo de configuração do kubeadm. |
|
| --control-plane-endpoint string | |
Especifica um endereço IP estável ou nome DNS para a camada de gerenciamento. |
|
| --cri-socket string | |
Caminho para o soquete CRI se conectar. Se vazio, o kubeadm tentará autodetectar este valor; utilize esta opção somente se você possui mais que um CRI instalado ou se você possui um soquete CRI fora do padrão. |
|
| --dry-run | |
Não aplica as modificações; apenas imprime as alterações que seriam efetuadas. |
|
| --feature-gates string | |
Um conjunto de pares chave=valor que descreve feature gates para várias funcionalidades. As opções são: |
|
| -h, --help | |
ajuda para init |
|
| --ignore-preflight-errors strings | |
Uma lista de verificações para as quais erros serão exibidos como avisos. Exemplos: 'IsPrivilegedUser,Swap'. O valor 'all' ignora erros de todas as verificações. |
|
| --image-repository string Padrão: "registry.k8s.io" | |
Seleciona um registro de contêineres de onde baixar imagens. |
|
| --kubernetes-version string Padrão: "stable-1" | |
Seleciona uma versão do Kubernetes específica para a camada de gerenciamento. |
|
| --node-name string | |
Especifica o nome do nó. |
|
| --patches string | |
Caminho para um diretório contendo arquivos nomeados no padrão "target[suffix][+patchtype].extension". Por exemplo, "kube-apiserver0+merge.yaml" ou somente "etcd.json". "target" pode ser um dos seguintes valores: "kube-apiserver", "kube-controller-manager", "kube-scheduler", "etcd". "patchtype" pode ser "strategic", "merge" ou "json" e corresponde aos formatos de patch suportados pelo kubectl. O valor padrão para "patchtype" é "strategic". "extension" deve ser "json" ou "yaml". "suffix" é uma string opcional utilizada para determinar quais patches são aplicados primeiro em ordem alfanumérica. |
|
| --pod-network-cidr string | |
Especifica um intervalo de endereços IP para a rede do Pod. Quando especificado, a camada de gerenciamento irá automaticamente alocar CIDRs para cada nó. |
|
| --service-cidr string Padrão: "10.96.0.0/12" | |
Utiliza um intervalo alternativo de endereços IP para VIPs de serviço. |
|
| --service-dns-domain string Padrão: "cluster.local" | |
Utiliza um domínio alternativo para os serviços. Por exemplo, "myorg.internal". |
|
| --skip-certificate-key-print | |
Não exibe a chave utilizada para encriptar os certificados da camada de gerenciamento. |
|
| --skip-phases strings | |
Lista de fases a serem ignoradas. |
|
| --skip-token-print | |
Pula a impressão do token de autoinicialização padrão gerado pelo comando 'kubeadm init'. |
|
| --token string | |
O token a ser utilizado para estabelecer confiança bidirecional entre nós de carga de trabalho e nós da camada de gerenciamento. O formato segue a expressão regular [a-z0-9]{6}.[a-z0-9]{16} - por exemplo, abcdef.0123456789abcdef. |
|
| --token-ttl duration Padrão: 24h0m0s | |
A duração de tempo de um token antes deste ser automaticamente apagado (por exemplo, 1s, 2m, 3h). Quando informado '0', o token não expira. |
|
| --upload-certs | |
Sobe os certificados da camada de gerenciamento para o Secret kubeadm-certs. |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o sistema de arquivos raiz 'real' do host. |
|
O comando kubeadm init inicializa um nó da camada de gerenciamento do Kubernetes
através da execução dos passos abaixo:
Roda uma série de verificações pré-execução para validar o estado do sistema
antes de efetuar mudanças. Algumas verificações emitem apenas avisos, outras
são consideradas erros e cancelam a execução do kubeadm até que o problema
seja corrigido ou que o usuário especifique a opção
--ignore-preflight-errors=<lista-de-erros-a-ignorar>.
Gera uma autoridade de certificação (CA) auto-assinada para criar identidades
para cada um dos componentes do cluster. O usuário pode informar seu próprio
certificado CA e/ou chave ao instalar estes arquivos no diretório de
certificados configurado através da opção --cert-dir (por padrão, este
diretório é /etc/kubernetes/pki).
Os certificados do servidor da API terão entradas adicionais para nomes
alternativos (subject alternative names, ou SANs) especificados através da
opção --apiserver-cert-extra-sans. Estes argumentos serão modificados para
caracteres minúsculos quando necessário.
Escreve arquivos kubeconfig adicionais no diretório /etc/kubernetes para o
kubelet, para o gerenciador de controladores e para o escalonador utilizarem
ao conectarem-se ao servidor da API, cada um com sua própria identidade, bem
como um arquivo kubeconfig adicional para administração do cluster chamado
admin.conf.
Gera manifestos de Pods estáticos para o servidor da API, para o gerenciador de controladores e para o escalonador. No caso de uma instância externa do etcd não ter sido providenciada, um manifesto de Pod estático adicional é gerado para o etcd.
Manifestos de Pods estáticos são escritos no diretório /etc/kubernetes/manifests;
o kubelet lê este diretório em busca de manifestos de Pods para criar na
inicialização.
Uma vez que os Pods da camada de gerenciamento estejam criados e rodando,
a sequência de execução do comando kubeadm init pode continuar.
Aplica labels e taints ao nó da camada de gerenciamento de modo que cargas de trabalho adicionais não sejam escalonadas para executar neste nó.
Gera o token que nós adicionais podem utilizar para associarem-se a uma
camada de gerenciamento no futuro. Opcionalmente, o usuário pode fornecer um
token através da opção --token, conforme descrito na documentação do
comando kubeadm token.
Prepara todas as configurações necessárias para permitir que nós se associem ao cluster utilizando os mecanismos de Tokens de Inicialização e Inicialização TLS:
Escreve um ConfigMap para disponibilizar toda a informação necessária para associar-se a um cluster e para configurar regras de controle de acesso baseada em funções (RBAC).
Permite o acesso dos tokens de inicialização à API de assinaturas CSR.
Configura a auto-aprovação de novas requisições CSR.
Para mais informações, consulte kubeadm join.
Instala um servidor DNS (CoreDNS) e os componentes adicionais do kube-proxy através do servidor da API. A partir da versão 1.11 do Kubernetes, CoreDNS é o servidor DNS padrão. Mesmo que o servidor DNS seja instalado nessa etapa, o seu Pod não será escalonado até que um CNI seja instalado.
O kubeadm permite que você crie um nó da camada de gerenciamento em fases
utilizando o comando kubeadm init phase.
Para visualizar a lista ordenada de fases e subfases, você pode rodar o comando
kubeadm init --help. A lista estará localizada no topo da ajuda e cada fase
tem sua descrição listada juntamente com o comando. Perceba que ao rodar o
comando kubeadm init todas as fases e subfases são executadas nesta ordem
exata.
Algumas fases possuem flags específicas. Caso você deseje ver uma lista de todas
as opções disponíveis, utilize a flag --help. Por exemplo:
sudo kubeadm init phase control-plane controller-manager --help
Você também pode utilizar a flag --help para ver uma lista de subfases de uma
fase superior:
sudo kubeadm init phase control-plane --help
kubeadm init também expõe uma flag chamada --skip-phases que pode ser
utilizada para pular a execução de certas fases. Esta flag aceita uma lista de
nomes de fases. Os nomes de fases aceitos estão descritos na lista ordenada
acima.
Um exemplo:
sudo kubeadm init phase control-plane all --config=configfile.yaml
sudo kubeadm init phase etcd local --config=configfile.yaml
# agora você pode modificar os manifestos da camada de gerenciamento e do etcd
sudo kubeadm init --skip-phases=control-plane,etcd --config=configfile.yaml
O que este exemplo faz é escrever os manifestos da camada de gerenciamento e do
etcd no diretório /etc/kubernetes/manifests, baseados na configuração descrita
no arquivo configfile.yaml. Isto permite que você modifique os arquivos e
então pule estas fases utilizando a opção --skip-phases. Ao chamar o último
comando, você cria um nó da camada de gerenciamento com os manifestos
personalizados.
Kubernetes v1.22 [beta]
Como alternativa, você pode também utilizar o campo skipPhases na configuração
InitConfiguration.
É possível configurar o comando kubeadm init com um arquivo de configuração ao
invés de argumentos de linha de comando, e algumas funcionalidades mais avançadas
podem estar disponíveis apenas como opções do arquivo de configuração. Este
arquivo é fornecido utilizando a opção --config e deve conter uma estrutura
ClusterConfiguration e, opcionalmente, mais estruturas separadas por ---\n.
Combinar a opção --config com outras opções de linha de comando pode não ser
permitido em alguns casos.
A configuração padrão pode ser emitida utilizando o comando kubeadm config print.
Se a sua configuração não estiver utilizando a última versão, é recomendado que você migre utilizando o comando kubeadm config migrate.
Para mais informações sobre os campos e utilização da configuração, você pode consultar a página de referência da API.
O kubeadm suporta um conjunto de feature gates que são exclusivos do kubeadm e
podem ser utilizados somente durante a criação de um cluster com kubeadm init.
Estas funcionalidades podem controlar o comportamento do cluster. Os
feature gates são removidos assim que uma funcionalidade atinge a disponibilidade
geral (general availability, ou GA).
Para informar um feature gate, você pode utilizar a opção --feature-gates
do comando kubeadm init, ou pode adicioná-las no campo featureGates quando
um arquivo de configuração
é utilizado através da opção --config.
A utilização de feature gates dos componentes principais do Kubernetes com o kubeadm não é suportada. Ao invés disso, é possível enviá-los através da personalização de componentes com a API do kubeadm.
Lista dos feature gates:
| Feature gate | Valor-padrão | Versão Alfa | Versão Beta |
|---|---|---|---|
PublicKeysECDSA |
false |
1.19 | - |
RootlessControlPlane |
false |
1.22 | - |
UnversionedKubeletConfigMap |
true |
1.22 | 1.23 |
true por padrão. Ou seja, a funcionalidade
estará sempre ativa.Descrição dos feature gates:
PublicKeysECDSAkubeadm certs renew, mas você não pode
alternar entre os algoritmos RSA e ECDSA dinamicamente ou durante atualizações.RootlessControlPlanekube-apiserver,
kube-controller-manager, kube-scheduler e etcd, têm seus contêineres
configurados para rodarem como usuários não-root. Se a opção não for habilitada,
estes componentes são executados como root. Você pode alterar o valor deste
feature gate antes de atualizar seu cluster para uma versão mais recente do
Kubernetes.UnversionedKubeletConfigMaptrue, o ConfigMap
será nomeado kubelet-config. Caso esteja especificada com o valor false, o
nome do ConfigMap incluirá as versões maior e menor do Kubernetes instalado
(por exemplo, kubelet-config-1.35). O kubeadm garante
que as regras de RBAC para leitura e escrita deste ConfigMap serão apropriadas
para o valor escolhido. Quando o kubeadm cria este ConfigMap (durante a execução
dos comandos kubeadm init ou kubeadm upgrade apply), o kubeadm irá respeitar
o valor da opção UnversionedKubeletConfigMap. Quando tal ConfigMap for lido
(durante a execução dos comandos kubeadm join, kubeadm reset,
kubeadm upgrade...), o kubeadm tentará utilizar o nome do ConfigMap sem a
versão primeiro. Se esta operação não for bem-sucedida, então o kubeadm irá
utilizar o nome legado (versionado) para este ConfigMap.UnversionedKubeletConfigMap com o valor false é suportado,
mas está descontinuado.Para informações sobre como utilizar parâmetros do kube-proxy na configuração do kubeadm, veja:
Para informações sobre como habilitar o modo IPVS com o kubeadm, veja:
Para informações sobre como passar as opções aos componentes da camada de gerenciamento, veja:
Para executar o kubeadm sem uma conexão à internet, você precisa baixar as imagens de contêiner requeridas pela camada de gerenciamento.
Você pode listar e baixar as imagens utilizando o subcomando
kubeadm config images:
kubeadm config images list
kubeadm config images pull
Você pode passar a opção --config para os comandos acima através de um
arquivo de configuração do kubeadm para controlar os campos
kubernetesVersion e imageRepository.
Todas as imagens padrão hospedadas em registry.k8s.io que o kubeadm requer suportam
múltiplas arquiteturas.
Por padrão, o kubeadm baixa imagens hospedadas no repositório de contêineres
registry.k8s.io. Se a versão requisitada do Kubernetes é um rótulo de integração
contínua (por exemplo, ci/latest), o repositório de contêineres
gcr.io/k8s-staging-ci-images é utilizado.
Você pode sobrescrever este comportamento utilizando o kubeadm com um arquivo de configuração. Personalizações permitidas são:
kubernetesVersion que afeta a versão das
imagens.imageRepository para ser utilizado no lugar de registry.k8s.io.imageRepository e imageTag,
correspondendo ao repositório de contêineres e tag a ser utilizada, para as imagens
dos componentes etcd ou CoreDNS.Caminhos de imagens do repositório de contêineres padrão registry.k8s.io podem diferir
dos utilizados em repositórios de contêineres personalizados através do campo
imageRepository devido a razões de retrocompatibilidade. Por exemplo, uma
imagem pode ter um subcaminho em registry.k8s.io/subcaminho/imagem, mas quando
utilizado um repositório de contêineres personalizado, o valor padrão será
meu.repositoriopersonalizado.io/imagem.
Para garantir que você terá as imagens no seu repositório personalizado em caminhos que o kubeadm consiga consumir, você deve:
registry.k8s.io utilizando o comando
kubeadm config images {list|pull}.kubeadm config images list --config=config.yaml, onde config.yaml contém
o valor customizado do campo imageRepository, e/ou imageTag para os
componentes etcd e CoreDNS.config.yaml quando executar o comando kubeadm init.pause)Para configurar uma imagem personalizada para o sandbox, você precisará configurar o agente de execução de contêineres para utilizar a imagem. Verifique a documentação para o seu agente de execução de contêineres para mais informações sobre como modificar esta configuração; para alguns agentes de execução de contêiner você também encontrará informações no tópico Agentes de Execução de Contêineres.
Ao adicionar a opção --upload-certs ao comando kubeadm init você pode
subir temporariamente certificados da camada de gerenciamento em um Secret no
cluster. Este Secret expira automaticamente após 2 horas. Os certificados são
encriptados utilizando uma chave de 32 bytes que pode ser especificada através
da opção --certificate-key. A mesma chave pode ser utilizada para baixar
certificados quando nós adicionais da camada de gerenciamento estão se associando
ao cluster, utilizando as opções --control-plane e --certificate-key ao rodar
kubeadm join.
O seguinte comando de fase pode ser usado para subir os certificados novamente após a sua expiração:
kubeadm init phase upload-certs --upload-certs --certificate-key=ALGUM_VALOR --config=ALGUM_ARQUIVO_YAML
Se a opção --certificate-key não for passada aos comandos kubeadm init
e kubeadm init phase upload-certs, uma nova chave será gerada automaticamente.
O comando abaixo pode ser utilizado para gerar uma nova chave sob demanda:
kubeadm certs certificate-key
Para informações detalhadas sobre gerenciamento de certificados com o kubeadm, consulte Gerenciamento de Certificados com o kubeadm. O documento inclui informações sobre a utilização de autoridades de certificação (CA) externas, certificados personalizados e renovação de certificados.
O pacote kubeadm é distribuído com um arquivo de configuração para rodar o
kubelet utilizando systemd. Note que o kubeadm nunca altera este arquivo.
Este arquivo drop-in é parte do pacote DEB/RPM do kubeadm.
Para mais informações, consulte Gerenciando o arquivo drop-in do kubeadm para o systemd.
Por padrão, o kubeadm tenta detectar seu agente de execução de contêineres. Para mais detalhes sobre esta detecção, consulte o guia de instalação CRI do kubeadm.
Por padrão, o kubeadm gera um nome para o nó baseado no endereço da máquina.
Você pode sobrescrever esta configuração utilizando a opção --node-name. Esta
opção passa o valor apropriado para a opção --hostname-override
do kubelet.
Note que sobrescrever o hostname de um nó pode interferir com provedores de nuvem.
Ao invés de copiar o token que você obteve do comando kubeadm init para cada nó,
como descrito no tutorial básico do kubeadm,
você pode paralelizar a distribuição do token para facilitar a automação.
Para implementar esta automação, você precisa saber o endereço IP que o nó da
camada de gerenciamento irá ter após a sua inicialização, ou utilizar um nome
DNS ou um endereço de um balanceador de carga.
Gere um token. Este token deve ter a forma <string de 6 caracteres>.<string de 16 caracteres>.
Mais especificamente, o token precisa ser compatível com a expressão regular:
[a-z0-9]{6}\.[a-z0-9]{16}.
O kubeadm pode gerar um token para você:
kubeadm token generate
Inicialize o nó da camada de gerenciamento e os nós de carga de trabalho de
forma concorrente com este token. Conforme os nós forem iniciando, eles
deverão encontrar uns aos outros e formar o cluster. O mesmo argumento
--token pode ser utilizado em ambos os comandos kubeadm init e
kubeadm join.
O mesmo procedimento pode ser feito para a opção --certificate-key quando
nós adicionais da camada de gerenciamento associarem-se ao cluster. A chave
pode ser gerada utilizando:
kubeadm certs certificate-key
Uma vez que o cluster esteja inicializado, você pode buscar as credenciais para
a camada de gerenciamento no caminho /etc/kubernetes/admin.conf e utilizá-las
para conectar-se ao cluster.
Note que este tipo de inicialização tem algumas garantias de segurança relaxadas
pois ele não permite que o hash do CA raiz seja validado com a opção
--discovery-token-ca-cert-hash (pois este hash não é gerado quando os nós são
provisionados). Para detalhes, veja a documentação do comando
kubeadm join.
kubeadm initkubeadm init ou kubeadm joinEste comando inicializa um nó de processamento do Kubernetes e o associa ao cluster.
Rode este comando em qualquer máquina que você deseje adicionar a um cluster existente
Ao associar um novo nó a um cluster inicializado com kubeadm, temos que estabelecer a confiança bidirecional. Este processo é dividido entre a descoberta (em que o nó estabelece a confiança na camada de gerenciamento do Kubernetes) e a inicialização TLS (em que a camada de gerenciamento do Kubernetes estabelece a confiança no nó).
Existem duas principais formas de descoberta. A primeira delas é o uso de um
token compartilhado, juntamente com o endereço IP do servidor da API. A segunda
é o fornecimento de um arquivo - um subconjunto do arquivo kubeconfig padrão. O
arquivo de descoberta/kubeconfig suporta autenticação por token, plugins de
autenticação do client-go ("exec"), "tokenFile" e "authProvider". Este arquivo
pode ser um arquivo local ou um arquivo baixado através de uma URL HTTPS. Os
formatos são kubeadm join --discovery-token abcdef.1234567890abcdef 1.2.3.4:6443,
kubeadm join --discovery-file caminho/para/arquivo.conf, ou
kubeadm join --discovery-file https://endereco/arquivo.conf. Somente um formato
pode ser utilizado. Se os dados para a descoberta são carregados de uma URL,
o protocolo HTTPS deve ser utilizado. Neste caso, o conjunto de CAs instalado no
host é utilizado para verificar a conexão.
Se você utilizou um token compartilhado para descoberta, você deve também passar
a opção --discovery-token-ca-cert-hash para validar a chave pública da
autoridade de certificação raiz (CA) apresentada pela camada de gerenciamento do
Kubernetes. O valor desta opção é especificado no formato
"<tipo-de-hash>:<valor-codificado-em-hexadecimal>", onde o tipo de
hash suportado é "sha256". O hash é calculado a partir dos bytes do objeto
Subject Public Key Info (SPKI), como especificado pela RFC7469. Este valor fica
disponível na saída do comando kubeadm init ou pode ser calculado utilizando
ferramentas padronizadas. A opção --discovery-token-ca-cert-hash pode ser
especificada múltiplas vezes para permitir informar mais que uma chave pública.
Se você não puder obter o hash da chave pública da autoridade de certificação
de antemão, você pode passar a opção --discovery-token-unsafe-skip-ca-verification
para desabilitar esta verificação. Esta opção enfraquece o modelo de segurança
do kubeadm, já que outros nós podem potencialmente personificar a camada de
gerenciamento do Kubernetes.
O mecanismo de inicialização TLS também é conduzido por um token compartilhado.
Este token é utilizado para temporariamente autenticar-se com a camada de
gerenciamento do Kubernetes para enviar uma requisição de assinatura de
certificado (CSR) para um par de chaves criado localmente. Por padrão, o kubeadm
irá configurar a camada de gerenciamento do Kubernetes para automaticamente
aprovar estas requisições de assinatura. O token é enviado através da opção
--tls-bootstrap-token abcdef.1234567890abcdef.
Frequentemente, o mesmo token é utilizado para ambas as partes. Neste caso, a
opção --token pode ser utilizada ao invés de especificar cada token
individualmente.
O comando join [api-server-endpoint] executa as seguintes fases:
preflight Executa as verificações pré-execução
control-plane-prepare Prepara a máquina para servir um nó da camada de gerenciamento
/download-certs [EXPERIMENTAL] Baixa certificados compartilhados entre nós da camada de gerenciamento do Secret kubeadm-certs
/certs Gera os certificados para os novos componentes da camada de gerenciamento
/kubeconfig Gera o arquivo kubeconfig para os novos componentes da camada de gerenciamento
/control-plane Gera os manifestos para os novos componentes da camada de gerenciamento
kubelet-start Escreve as configurações do kubelet, os certificados, e (re)inicia o kubelet
control-plane-join Associa uma máquina como uma instância da camada de gerenciamento
/etcd Adiciona como um novo membro do etcd local
/update-status Registra o novo nó da camada de gerenciamento no objeto ClusterStatus mantido no ConfigMap kubeadm-config (DESCONTINUADO)
/mark-control-plane Marca um nó como nó da camada de gerenciamento
kubeadm join [api-server-endpoint] [flags]
| --apiserver-advertise-address string | |
Se o nó hospedar uma nova instância da camada de gerenciamento, este é o endereço IP que servidor da API irá anunciar que está aguardando conexões. Quando não especificado, a interface de rede padrão é utilizada. |
|
| --apiserver-bind-port int32 Default: 6443 | |
Se o nó hospedar uma nova instância da camada de gerenciamento, a porta que o servidor da API deve conectar-se. |
|
| --certificate-key string | |
Chave utilizada para decriptar as credenciais do certificado enviadas pelo comando init. |
|
| --config string | |
Caminho para um arquivo de configuração do kubeadm. |
|
| --control-plane | |
Cria uma nova instância da camada de gerenciamento neste nó. |
|
| --cri-socket string | |
Caminho para o soquete CRI conectar-se. Se vazio, o kubeadm tentará autodetectar este valor; utilize esta opção somente se você possui mais que um CRI instalado ou se você possui um soquete CRI fora do padrão. |
|
| --discovery-file string | |
Para descoberta baseada em arquivo, um caminho de arquivo ou uma URL de onde a informação do cluster deve ser carregada. |
|
| --discovery-token string | |
Para descoberta baseada em token, o token utilizado para validar a informação do cluster obtida do servidor da API. |
|
| --discovery-token-ca-cert-hash strings | |
Para descoberta baseada em token, verifica que a chave pública do CA raiz corresponde a este hash (formato: "<tipo>:<valor>"). |
|
| --discovery-token-unsafe-skip-ca-verification | |
Para descoberta baseada em token, permite associar-se ao cluster sem fixação da autoridade de certificação (opção --discovery-token-ca-cert-hash). |
|
| --dry-run | |
Não aplica as modificações; apenas imprime as alterações que seriam efetuadas. |
|
| -h, --help | |
ajuda para join |
|
| --ignore-preflight-errors strings | |
Uma lista de verificações para as quais erros serão exibidos como avisos. Exemplos: 'IsPrivilegedUser,Swap'. O valor 'all' ignora erros de todas as verificações. |
|
| --node-name string | |
Especifica o nome do nó. |
|
| --patches string | |
Caminho para um diretório contendo arquivos nomeados no padrão "target[suffix][+patchtype].extension". Por exemplo, "kube-apiserver0+merge.yaml" ou somente "etcd.json". "target" pode ser um dos seguintes valores: "kube-apiserver", "kube-controller-manager", "kube-scheduler", "etcd". "patchtype" pode ser "strategic", "merge" ou "json" e corresponde aos formatos de patch suportados pelo kubectl. O valor padrão para "patchtype" é "strategic". "extension" deve ser "json" ou "yaml". "suffix" é uma string opcional utilizada para determinar quais patches são aplicados primeiro em ordem alfanumérica. |
|
| --skip-phases strings | |
Lista de fases a serem ignoradas. |
|
| --tls-bootstrap-token string | |
Especifica o token a ser utilizado para autenticar temporariamente com a camada de gerenciamento do Kubernetes durante o processo de associação do nó ao cluster. |
|
| --token string | |
Utiliza este token em ambas as opções discovery-token e tls-bootstrap-token quando tais valores não são informados. |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o sistema de arquivos raiz 'real' do host. |
|
joinO comando kubeadm join inicializa um nó de processamento ou um nó da camada
de gerenciamento e o adiciona ao cluster. Esta ação consiste nos seguintes passos
para nós de processamento:
O kubeadm baixa as informações necessárias do cluster através servidor da API. Por padrão, o token de autoinicialização e o hash da chave da autoridade de certificação (CA) são utilizados para verificar a autenticidade dos dados baixados. O certificado raiz também pode ser descoberto diretamente através de um arquivo ou URL.
Uma vez que as informações do cluster são conhecidas, o kubelet pode começar o processo de inicialização TLS.
A inicialização TLS utiliza o token compartilhado para autenticar temporariamente com o servidor da API do Kubernetes a fim de submeter uma requisição de assinatura de certificado (certificate signing request, ou CSR); por padrão, a camada de gerenciamento assina essa requisição CSR automaticamente.
Por fim, o kubeadm configura o kubelet local para conectar no servidor da API com a identidade definitiva atribuída ao nó.
Para nós da camada de gerenciamento, passos adicionais são executados:
O download de certificados compartilhados por todos os nós da camada de gerenciamento (quando explicitamente solicitado pelo usuário).
Geração de manifestos, certificados e arquivo kubeconfig para os componentes da camada de gerenciamento.
Adição de um novo membro local do etcd.
O kubeadm permite que você associe um nó a um cluster em fases utilizando
kubeadm join phase.
Para visualizar a lista ordenada de fases e subfases disponíveis, você pode
executar o comando kubeadm join --help. A lista estará localizada no topo da
tela da ajuda e cada fase terá uma descrição ao lado. Note que ao chamar
kubeadm join todas as fases e subfases serão executadas nesta ordem exata.
Algumas fases possuem opções únicas, portanto, se você desejar ver uma lista das
opções disponíveis, adicione a flag --help. Por exemplo:
kubeadm join phase kubelet-start --help
De forma semelhante ao comando
kubeadm init phase,
kubeadm join phase permite que você ignore uma lista de fases utilizando a
opção --skip-phases.
Por exemplo:
sudo kubeadm join --skip-phases=preflight --config=config.yaml
Kubernetes v1.22 [beta]
Alternativamente, você pode utilizar o campo skipPhases no manifesto
JoinConfiguration.
A descoberta do kubeadm tem diversas opções, cada uma com suas próprias contrapartidas de segurança. O método correto para o seu ambiente depende de como você aprovisiona seus nós e as expectativas de segurança que você tem a respeito da rede e ciclo de vida dos seus nós.
Este é o modo padrão do kubeadm. Neste modo, o kubeadm baixa a configuração do cluster (incluindo a CA raiz) e a valida, utilizando o token, além de verificar que a chave pública da CA raiz corresponda ao hash fornecido e que o certificado do servidor da API seja válido sob a CA raiz.
O hash da chave pública da CA tem o formato sha256:<hash_codificado_em_hexa>.
Por padrão, o valor do hash é retornado no comando kubeadm join impresso ao
final da execução de kubeadm init ou na saída do comando
kubeadm token create --print-join-command. Este hash é gerado em um formato
padronizado (veja a RFC7469)
e pode também ser calculado com ferramentas de terceiros ou sistemas de
provisionamento. Por exemplo, caso deseje utilizar a ferramenta de linha de
comando do OpenSSL:
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
Exemplos de comandos kubeadm join:
Para nós de processamento:
kubeadm join --discovery-token abcdef.1234567890abcdef --discovery-token-ca-cert-hash sha256:1234..cdef 1.2.3.4:6443
Para nós da camada de gerenciamento:
kubeadm join --discovery-token abcdef.1234567890abcdef --discovery-token-ca-cert-hash sha256:1234..cdef --control-plane 1.2.3.4:6443
Você também pode executar o comando join para um nó da camada de gerenciamento
com a opção --certificate-key para copiar certificados para este nó, caso o
comando kubeadm init tenha sido executado com a opção --upload-certs.
Vantagens:
Permite à inicialização dos nós descobrir uma raiz de confiança para a camada de gerenciamento mesmo que outros nós de processamento ou a rede estejam comprometidos.
É conveniente para ser executado manualmente pois toda a informação requerida
cabe num único comando kubeadm join.
Desvantagens:
Este modo depende apenas do token simétrico para assinar (HMAC-SHA256) a
informação de descoberta que estabelece a raiz de confiança para a camada de
gerenciamento. Para utilizar este modo, os nós que estão se associando ao cluster
devem ignorar a validação do hash da chave pública da autoridade de
certificação, utilizando a opção --discovery-token-unsafe-skip-ca-verification.
Você deve considerar o uso de um dos outros modos quando possível.
Exemplo de comando kubeadm join:
kubeadm join --token abcdef.1234567890abcdef --discovery-token-unsafe-skip-ca-verification 1.2.3.4:6443
Vantagens:
Ainda protege de muitos ataques a nível de rede.
O token pode ser gerado de antemão e compartilhado com os nós da camada de gerenciamento e de processamento, que por sua vez podem inicializar-se em paralelo, sem coordenação. Isto permite que este modo seja utilizado em muitos cenários de aprovisionamento.
Desvantagens:
Este modo fornece uma maneira alternativa de estabelecer uma raiz de confiança entre os nós da camada de gerenciamento e os nós de processamento. Considere utilizar este modo se você estiver construindo uma infraestrutura de aprovisionamento automático utilizando o kubeadm. O formato do arquivo de descoberta é um arquivo kubeconfig comum do Kubernetes.
Caso o arquivo de descoberta não contenha credenciais, o token de descoberta TLS será utilizado.
Exemplos de comandos kubeadm join:
kubeadm join --discovery-file caminho/para/arquivo.conf (arquivo local)
kubeadm join --discovery-file https://endereco/arquivo.conf (URL HTTPS remota)
Vantagens:
Desvantagens:
Os valores padrão de instalação do kubeadm podem não funcionar para todos os casos de uso. Esta seção documenta como tornar uma instalação mais segura, ao custo de usabilidade.
Por padrão, um auto-aprovador de requisições CSR está habilitado. Este auto-aprovador irá aprovar quaisquer requisições de certificado de cliente para um kubelet quando um token de autoinicialização for utilizado para autenticação. Se você não deseja que o cluster aprove automaticamente certificados de cliente para os kubelets, você pode desligar a auto-aprovação com o seguinte comando:
kubectl delete clusterrolebinding kubeadm:node-autoapprove-bootstrap
Após o desligamento da auto-aprovação, o comando kubeadm join irá aguardar até
que o administrador do cluster aprove a requisição CSR:
Utilizando o comando kubeadm get csr, você verá que o CSR original está em
estado pendente.
kubectl get csr
A saída é semelhante a:
NAME AGE REQUESTOR CONDITION
node-csr-c69HXe7aYcqkS1bKmH4faEnHAWxn6i2bHZ2mD04jZyQ 18s system:bootstrap:878f07 Pending
O comando kubectl certificate approve permite ao administrador aprovar o
CSR. Esta ação informa ao controlador de assinatura de certificados que este
deve emitir um certificado para o requerente com os atributos requeridos no
CSR.
kubectl certificate approve node-csr-c69HXe7aYcqkS1bKmH4faEnHAWxn6i2bHZ2mD04jZyQ
A saída é semelhante a:
certificatesigningrequest "node-csr-c69HXe7aYcqkS1bKmH4faEnHAWxn6i2bHZ2mD04jZyQ" approved
Este comando muda o estado do objeto CSR para o estado ativo.
kubectl get csr
A saída é semelhante a:
NAME AGE REQUESTOR CONDITION
node-csr-c69HXe7aYcqkS1bKmH4faEnHAWxn6i2bHZ2mD04jZyQ 1m system:bootstrap:878f07 Approved,Issued
Esta mudança força com que o fluxo do comando kubeadm join seja bem-sucedido
somente quando o comando kubectl certificate approve for executado.
cluster-infoPara que o fluxo de associação de um nó ao cluster seja possível utilizando
somente um token como a única informação necessária para validação, um ConfigMap
com alguns dados necessários para validação da identidade do nó da camada de
gerenciamento é exposto publicamente por padrão. Embora nenhum dado deste
ConfigMap seja privado, alguns usuários ainda podem preferir bloquear este
acesso. Mudar este acesso bloqueia a habilidade de utilizar a opção
--discovery-token do fluxo do comando kubeadm join. Para desabilitar este
acesso:
cluster-info do servidor da API:kubectl -n kube-public get cm cluster-info -o jsonpath='{.data.kubeconfig}' | tee cluster-info.yaml
A saída é semelhante a:
apiVersion: v1
kind: Config
clusters:
- cluster:
certificate-authority-data: <ca-cert>
server: https://<ip>:<port>
name: ""
contexts: []
current-context: ""
preferences: {}
users: []
Utilize o arquivo cluster-info.yaml como um argumento para o comando
kubeadm join --discovery-file.
Desligue o acesso público ao ConfigMap cluster-info:
kubectl -n kube-public delete rolebinding kubeadm:bootstrap-signer-clusterinfo
Estes comandos devem ser executados após kubeadm init, mas antes de
kubeadm join.
kubeadm join com um arquivo de configuraçãoÉ possível configurar o comando kubeadm join apenas com um arquivo de
configuração, em vez de utilizar opções de linha de comando, e algumas
funcionalidades avançadas podem estar disponíveis somente como opções no arquivo
de configuração. Este arquivo é passado através da opção --config e deve conter
uma estrutura JoinConfiguration. A utilização da opção --config com outras
opções da linha de comando pode não ser permitida em alguns casos.
A configuração padrão pode ser emitida utilizando o comando kubeadm config print.
Caso sua configuração não esteja utilizando a versão mais recente, é recomendado que você migre utilizando o comando kubeadm config migrate.
Para mais informações sobre os campos e utilização da configuração você pode consultar a referência da API.
kubeadm join.kubeadm init
ou kubeadm join.kubeadm upgrade é um comando amigável que envolve uma lógica de atualização complexa por trás de um comando, com suporte para planejar e executar de fato uma atualização.
As etapas para realizar uma atualização usando kubeadm estão descritas neste documento. Para versões mais antigas do kubeadm, consulte os conjuntos de documentação mais antigos do site Kubernetes.
Você pode usar kubeadm upgrade diff para ver as alterações que seriam aplicadas aos manifestos de Pod estático.
No Kubernetes v1.15.0 e posteriores, o kubeadm upgrade apply e kubeadm upgrade node também renovarão automaticamente os certificados gerenciados pelo kubeadm neste nó, incluindo aqueles armazenados nos arquivos do kubeconfig.
É possível optar por não renovar usando a flag --certificate-renewal=false.
Para mais detalhes sobre a renovação dos certificados, consulte a documentação de gerenciamento de certificados.
kubeadm upgrade apply e kubeadm upgrade plan tem uma flag legada --config que possibilita reconfigurar o cluster enquanto realiza o planejamento ou a atualização do nó específico da camada de gerenciamento.
Esteja ciente de que o fluxo de trabalho da atualização não foi projetado para este cenário e existem relatos de resultados inesperados.Verifique quais versões estão disponíveis para atualizar e verifique se o seu cluster atual é atualizável. Para pular a verificação da Internet, passe o parâmetro opcional [versão]
Verifique quais versões estão disponíveis para atualizar e verifique se o seu cluster atual é atualizável. Para pular a verificação da Internet, passe o parâmetro opcional [versão]
kubeadm upgrade plan [versão] [flags]
| --allow-experimental-upgrades | |
Exibe as versões instáveis do Kubernetes como uma alternativa de atualização e permite a atualização para versões alfa/beta/release candidate do Kubernetes. |
|
| --allow-release-candidate-upgrades | |
Exibe as versões candidatas a lançamento do Kubernetes como uma alternativa de atualização e permite a atualização para versões candidatas a lançamento do Kubernetes. |
|
| --config string | |
Caminho para um arquivo de configuração kubeadm. |
|
| --feature-gates string | |
Um conjunto de pares chave=valor que descreve feature gates para várias funcionalidades. As opções são: |
|
| -h, --help | |
ajuda para plan |
|
| --ignore-preflight-errors strings | |
Uma lista de verificações para as quais erros serão exibidos como avisos. Exemplos: 'IsPrivilegedUser,Swap'. O valor 'all' ignora erros de todas as verificações. |
|
| --kubeconfig string Padrão: "/etc/kubernetes/admin.conf" | |
O arquivo kubeconfig a ser usado para se comunicar com o cluster. Se a flag não estiver definida, um conjunto de locais predefinidos pode ser pesquisado por um arquivo kubeconfig existente. |
|
| -o, --output string Padrão: "text" | |
EXPERIMENTAL: Formato de saída. Opções válidas: text|json|yaml. |
|
| --print-config | |
Especifica se o arquivo de configuração que será usado na atualização deve ser exibido ou não. |
|
| --show-managed-fields | |
Se verdadeiro, mantém os managedFields ao exibir os objetos no formato JSON ou YAML. |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o sistema de arquivos raiz 'real' do host. |
|
Atualiza o cluster Kubernetes para uma versão específica
Atualiza o cluster Kubernetes para uma versão específica
kubeadm upgrade apply [versão]
| --allow-experimental-upgrades | |
Exibe as versões instáveis do Kubernetes como uma alternativa de atualização e permite a atualização para versões alfa/beta/release candidate do Kubernetes. |
|
| --allow-release-candidate-upgrades | |
Exibe as versões candidatas a lançamento do Kubernetes como uma alternativa de atualização e permite a atualização para versões candidatas a lançamento do Kubernetes. |
|
| --certificate-renewal Padrão: true | |
Executa a renovação dos certificados usados pelo componente alterado durante as atualizações. |
|
| --config string | |
Caminho para um arquivo de configuração do kubeadm. |
|
| --dry-run | |
Não aplica as modificações; apenas exibe as alterações que seriam efetuadas. |
|
| --etcd-upgrade Padrão: true | |
Atualiza o etcd. |
|
| --feature-gates string | |
Um conjunto de pares chave=valor que descreve feature gates para várias funcionalidades. As opções são: |
|
| -f, --force | |
Força a atualização, embora alguns requisitos possam não estar sendo atendidos. Isso também implica o modo não interativo. |
|
| -h, --help | |
ajuda para apply |
|
| --ignore-preflight-errors strings | |
Uma lista de verificações para as quais erros serão exibidos como avisos. Exemplos: 'IsPrivilegedUser,Swap'. O valor 'all' ignora erros de todas as verificações. |
|
| --kubeconfig string Padrão: "/etc/kubernetes/admin.conf" | |
O arquivo kubeconfig a ser usado para se comunicar com o cluster. Se a flag não estiver definida, um conjunto de locais predefinidos pode ser pesquisado por um arquivo kubeconfig existente. |
|
| --patches string | |
Caminho para um diretório contendo arquivos nomeados no padrão "target[suffix][+patchtype].extension". Por exemplo, "kube-apiserver0+merge.yaml" ou somente "etcd.json". "target" pode ser um dos seguintes valores: "kube-apiserver", "kube-controller-manager", "kube-scheduler", "etcd", "kubeletconfiguration". "patchtype" pode ser "strategic", "merge" ou "json" e corresponde aos formatos de patch suportados pelo kubectl. O valor padrão para "patchtype" é "strategic". "extension" deve ser "json" ou "yaml". "suffix" é uma string opcional utilizada para determinar quais patches são aplicados primeiro em ordem alfanumérica. |
|
| --print-config | |
Especifica se o arquivo de configuração que será usado na atualização deve ser exibido ou não. |
|
| -y, --yes | |
Executa a atualização e não solicita um prompt de confirmação (modo não interativo). |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o sistema de arquivos raiz 'real' do host. |
|
Mostra quais diferenças serão aplicadas aos manifestos dos Pods estáticos existentes. Veja também: kubeadm upgrade apply --dry-run
Mostra quais diferenças serão aplicadas aos manifestos dos Pods estáticos existentes. Veja também: kubeadm upgrade apply --dry-run
kubeadm upgrade diff [versão] [flags]
| --api-server-manifest string Padrão: "/etc/kubernetes/manifests/kube-apiserver.yaml" | |
Caminho para o manifesto do servidor da API |
|
| --config string | |
Caminho para um arquivo de configuração do kubeadm. |
|
| -c, --context-lines int Padrão: 3 | |
Quantidade de linhas de contexto do diff |
|
| --controller-manager-manifest string Padrão: "/etc/kubernetes/manifests/kube-controller-manager.yaml" | |
Caminho para o manifesto do controlador de gerenciadores |
|
| -h, --help | |
Ajuda para diff |
|
| --kubeconfig string Padrão: "/etc/kubernetes/admin.conf" | |
O arquivo kubeconfig a ser usado para se comunicar com o cluster. Se a flag não estiver definida, um conjunto de locais predefinidos pode ser pesquisado por um arquivo kubeconfig existente. |
|
| --scheduler-manifest string Padrão: "/etc/kubernetes/manifests/kube-scheduler.yaml" | |
Caminho para o manifesto do escalonador |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o sistema de arquivos raiz 'real' do host. |
|
Comando para atualização de um nó no cluster
Comando para atualização de um nó no cluster
O comando "node" executa as seguintes fases:
preflight Executa as verificações de pré-atualização do nó
control-plane Atualiza a instância da camada de gerenciamento implantada neste nó, se houver
kubelet-config Atualiza a configuração do kubelet para este nó
kubeadm upgrade node [flags]
| --certificate-renewal Padrão: true | |
Executa a renovação dos certificados usados pelo componente alterado durante as atualizações. |
|
| --dry-run | |
Não aplica as modificações; apenas exibe as alterações que seriam efetuadas. |
|
| --etcd-upgrade Padrão: true | |
Atualiza o etcd. |
|
| -h, --help | |
ajuda para node |
|
| --ignore-preflight-errors strings | |
Uma lista de verificações para as quais erros serão exibidos como avisos. Exemplos: 'IsPrivilegedUser,Swap'. O valor 'all' ignora erros de todas as verificações. |
|
| --kubeconfig string Padrão: "/etc/kubernetes/admin.conf" | |
O arquivo kubeconfig a ser usado para se comunicar com o cluster. Se a flag não estiver definida, um conjunto de locais predefinidos pode ser pesquisado por um arquivo kubeconfig existente. |
|
| --patches string | |
Caminho para um diretório contendo arquivos nomeados no padrão "target[suffix][+patchtype].extension". Por exemplo, "kube-apiserver0+merge.yaml" ou somente "etcd.json". "target" pode ser um dos seguintes valores: "kube-apiserver", "kube-controller-manager", "kube-scheduler", "etcd", "kubeletconfiguration". "patchtype" pode ser "strategic", "merge" ou "json" e corresponde aos formatos de patch suportados pelo kubectl. O valor padrão para "patchtype" é "strategic". "extension" deve ser "json" ou "yaml". "suffix" é uma string opcional utilizada para determinar quais patches são aplicados primeiro em ordem alfanumérica. |
|
| --skip-phases strings | |
Lista de fases a serem ignoradas |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o sistema de arquivos raiz 'real' do host. |
|
kubeadm upgradeDurante o kubeadm init, o kubeadm carrega o objeto ClusterConfiguration para o seu cluster em um ConfigMap chamado kubeadm-config no namespace do kube-system. Essa configuração é então lida durante kubeadm join, kubeadm reset e kubeadm upgrade.
Você pode usar o kubeadm config print para exibir a configuração estática padrão que o kubeadm usa para o kubeadm init e kubeadm join.
Para obter mais informações sobre init e join, navegue até Usando o kubeadm init com um arquivo de configuração ou Usando o kubeadm join com um arquivo de configuração.
Para obter mais informações sobre como usar a API de configuração do kubeadm, navegue até Personalizando componentes com a API do kubeadm..
Você pode usar o kubeadm config migrate para converter seus arquivos de configuração antigos que contêm uma versão obsoleta da API para uma versão mais recente e suportada da API.
kubeadm config images list e kubeadm config images pull podem ser usadas para listar e baixar as imagens que o kubeadm precisa.
Exibe configurações
Este comando exibe as configurações para subcomandos fornecidos. Para mais detalhes, consulte: https://pkg.go.dev/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm#section-directories
kubeadm config print [flags]
| -h, --help | |
ajuda para print |
|
| --kubeconfig string Padrão: "/etc/kubernetes/admin.conf" | |
O arquivo kubeconfig a ser usado para se comunicar com o cluster. Se a flag não estiver definida, um conjunto de locais predefinidos pode ser pesquisado por um arquivo kubeconfig existente. |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o 'real' sistema de arquivos raiz do host. |
|
Exibe a configuração de inicialização padrão, que pode ser usada para 'kubeadm init'
Este comando exibe objetos, como a configuração de inicialização padrão que é usada para 'kubeadm init'.
Observe que os valores confidenciais, como os campos do Token Bootstrap, são substituídos por valores de exemplo como "abcdef.0123456789abcdef", a fim de passar na validação, mas não executar o cálculo real para criar um token.
kubeadm config print init-defaults [flags]
| --component-configs strings | |
Uma lista dos objetos da API de configuração, separados por vírgulas, exibirá os valores padrão. Valores disponíveis: [KubeProxyConfiguration KubeletConfiguration]. Se essa flag não estiver definida, nenhuma configuração de componente será impressa. |
|
| -h, --help | |
ajuda para init-defaults |
|
| --kubeconfig string Padrão: "/etc/kubernetes/admin.conf" | |
O arquivo kubeconfig a ser usado para se comunicar com o cluster. Se a flag não estiver definida, um conjunto de locais predefinidos pode ser pesquisado por um arquivo kubeconfig existente. |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o 'real' sistema de arquivos raiz do host. |
|
Exibe a configuração padrão do join, que pode ser usada para 'kubeadm join'
Este comando exibe objetos como a configuração padrão de join que é usada para 'kubeadm join'.
Observe que valores confidenciais, como os campos do Token Bootstrap, são substituídos por valores de exemplo como "abcdef.0123456789abcdef", a fim de passar na validação, mas não executar o cálculo real para criar um token.
kubeadm config print join-defaults [flags]
| --component-configs strings | |
Uma lista dos objetos da API de configuração, separados por vírgulas, exibirá os valores padrão. Valores disponíveis: [KubeProxyConfiguration KubeletConfiguration]. Se essa flag não estiver definida, nenhuma configuração de componente será impressa. |
|
| -h, --help | |
ajuda para join-defaults |
|
| --kubeconfig string Padrão: "/etc/kubernetes/admin.conf" | |
O arquivo kubeconfig a ser usado para se comunicar com o cluster. Se a flag não estiver definida, um conjunto de locais predefinidos pode ser pesquisado por um arquivo kubeconfig existente. |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o 'real' sistema de arquivos raiz do host. |
|
Leia uma versão mais antiga dos tipos de API de configuração do kubeadm a partir de um arquivo e envie o objeto de configuração semelhante para a versão mais recente
Esse comando permite converter objetos de configuração de versões mais antigas para a versão mais recente suportada, localmente na ferramenta CLI sem nunca tocar em nada no cluster. Nesta versão do kubeadm, as seguintes versões da API são suportadas:
Além disso, o kubeadm só pode escrever a configuração da versão "kubeadm.k8s.io/v1beta3", mas pode ler os dois tipos. Portanto, independentemente da versão que você passar para o parâmetro --old-config , o objeto API será lido, desserializado, padronizado, convertido, validado e serializado novamente quando escrito no stdout ou --new-config, se especificado.
Em outras palavras, a saída deste comando é o que o kubeadm realmente leria internamente se você enviasse este arquivo para "kubeadm init"
kubeadm config migrate [flags]
| -h, --help | |
ajuda para migrate |
|
| --new-config string | |
Caminho para o arquivo de configuração kubeadm equivalente usando a nova versão da API. Opcional, se não for especificado, a saída será enviada para o STDOUT. |
|
| --old-config string | |
Caminho para o arquivo de configuração do kubeadm que está usando uma versão antiga da API e que deve ser convertido. Essa flag é obrigatória. |
|
| --kubeconfig string Padrão: "/etc/kubernetes/admin.conf" | |
O arquivo kubeconfig a ser usado para se comunicar com o cluster. Se a flag não estiver definida, um conjunto de locais predefinidos pode ser pesquisado por um arquivo kubeconfig existente. |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o 'real' sistema de arquivos raiz do host. |
|
Exibe uma lista de imagens que o kubeadm usará. O arquivo de configuração é usado caso quaisquer imagens ou repositórios de imagens sejam personalizados.
Exibe uma lista de imagens que o kubeadm usará. O arquivo de configuração é usado caso quaisquer imagens ou repositórios de imagens sejam personalizados.
kubeadm config images list [flags]
| --allow-missing-template-keys Padrão: true | |
Se verdadeiro (true), ignore quaisquer erros nos modelos quando um campo ou chave de mapa estiver faltando no modelo. Aplica-se apenas aos formatos de saída golang e jsonpath. |
|
| --config string | |
Caminho para um arquivo de configuração kubeadm. |
|
| -o, --experimental-output string Padrão: "text" | |
Formato de saída. Valores válidos: text|json|yaml|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file. |
|
| --feature-gates string | |
Um conjunto de pares chave=valor que descrevem opções para vários recursos. As opções são: |
|
| -h, --help | |
ajuda para list |
|
| --image-repository string Padrão: "registry.k8s.io" | |
Escolha um registro de contêineres para baixar imagens da camada de gerenciamento |
|
| --kubernetes-version string Padrão: "stable-1" | |
Escolha uma versão específica do Kubernetes para a camada de gerenciamento. |
|
| --show-managed-fields | |
Se verdadeiro, mantém os managedFields ao exibir os objetos no formato JSON ou YAML. |
|
| --kubeconfig string Padrão: "/etc/kubernetes/admin.conf" | |
O arquivo kubeconfig a ser usado para se comunicar com o cluster. Se a flag não estiver definida, um conjunto de locais predefinidos pode ser pesquisado por um arquivo kubeconfig existente. |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o 'real' sistema de arquivos raiz do host. |
|
Puxe imagens usadas pelo kubeadm
Baixa imagens usadas pelo kubeadm
kubeadm config images pull [flags]
| --config string | |
Caminho para um arquivo de configuração kubeadm. |
|
| --cri-socket string | |
Caminho para se conectar ao socket CRI. Se vazio, o kubeadm tentará detectar automaticamente esse valor; use essa opção somente se você tiver mais de um CRI instalado ou se tiver um socket CRI não padrão. |
|
| --feature-gates string | |
Um conjunto de pares chave=valor que descrevem feature gates para vários recursos. As opções são: |
|
| -h, --help | |
ajuda para pull |
|
| --image-repository string Padrão: "registry.k8s.io" | |
Escolha um registro de contêineres para baixar imagens da camada de gerenciamento |
|
| --kubernetes-version string Padrão: "stable-1" | |
Escolha uma versão específica do Kubernetes para a camada de gerenciamento. |
|
| --kubeconfig string Padrão: "/etc/kubernetes/admin.conf" | |
O arquivo kubeconfig a ser usado para se comunicar com o cluster. Se a flag não estiver definida, um conjunto de locais predefinidos pode ser pesquisado por um arquivo kubeconfig existente. |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o 'real' sistema de arquivos raiz do host. |
|
Executa o melhor esforço para reverter as alterações feitas pelo kubeadm init ou kubeadm join.
Executa o melhor esforço para reverter as alterações feitas no host por 'kubeadm init' ou 'kubeadm join'
Executa o melhor esforço para reverter as alterações feitas no host por 'kubeadm init' ou 'kubeadm join'
O comando "reset" executa as seguintes fases:
preflight Executa as verificações pré-execução do preflight.
remove-etcd-member Remove um membro etcd local.
cleanup-node Executa a limpeza do nó.
kubeadm reset [flags]
| --cert-dir string Padrão: "/etc/kubernetes/pki" | |
O caminho para o diretório onde os certificados estão armazenados. Se especificado, limpe este diretório. |
|
| --cri-socket string | |
Caminho para o socket CRI se conectar. Se vazio, o kubeadm tentará detectar automaticamente esse valor; use essa opção somente se você tiver mais de um CRI instalado ou se tiver um socket CRI não padrão. |
|
| -f, --force | |
Redefine o nó sem solicitar confirmação.. |
|
| -h, --help | |
ajuda para reset |
|
| --ignore-preflight-errors strings | |
Uma lista de verificações cujos erros serão mostrados como avisos. Exemplo: 'IsPrivilegedUser,Swap'. O valor 'all' ignora erros de todas as verificações. |
|
| --kubeconfig string Padrão: "/etc/kubernetes/admin.conf" | |
O arquivo kubeconfig a ser usado para se comunicar com o cluster. Se a flag não estiver definida, um conjunto de locais predefinidos pode ser pesquisado por um arquivo kubeconfig existente. |
|
| --skip-phases strings | |
Lista de fases a serem ignoradas |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o 'real' sistema de arquivos raiz do host. |
|
resetO kubeadm reset é o responsável por limpar o sistema de arquivos local dos nós a partir dos arquivos que foram criados usando os comandos kubeadm init ou kubeadm join. O reset dos nós da camanda de gerenciamento também remove o etcd local do nó do cluster etcd.
O kubeadm reset phase pode ser usado para executar separadamente as fases do fluxo de trabalho acima. Para pular uma lista de fases você pode usar --skip-phases, que funciona de maneira semelhante aos executores de fases dos comandos kubeadm join e kubeadm init.
O kubeadm reset não excluirá nenhum dado do etcd se o etcd externo estiver em uso. Isso significa que, se você executar o kubeadm init novamente usando os mesmos etcd endpoints, verá o estado dos clusters anteriores.
Para limpar dados etcd, é recomendável que você use um cliente como etcdctl, tal como:
etcdctl del "" --prefix
Consulte a documentação do etcd para obter mais informações.
Os Bootstrap tokens são usados para estabelecer uma relação de confiança bidirecional entre um nó que se junta ao cluster e um nó do plano de controle, conforme descrito na autenticação com tokens de inicialização.
O kubeadm init cria um token inicial com um TTL de 24 horas. Os comandos a seguir permitem que você gerencie esse token e também crie e gerencie os novos.
Crie tokens de inicialização no servidor
Este comando criará um token de inicialização. Você pode especificar os usos para este token, o "tempo de vida" e uma descrição amigável, que é opcional.
O [token] é o token real para gravar. Este deve ser um token aleatório gerado com segurança da forma "[a-z0-9]{6}.[a-z0-9]{16}". Se nenhum [token] for fornecido, o kubeadm gerará um token aleatório.
kubeadm token create [token]
| --certificate-key string | |
Quando usado em conjunto com '--print-join-command', exibe a flag completa 'kubeadm join' necessária para se unir ao cluster como um nó de camada de gerenciamento. Para criar uma nova chave de certificado, você deve usar 'kubeadm init phase upload-certs --upload-certs'. |
|
| --config string | |
Caminho para o arquivo de configuração kubeadm. |
|
| --description string | |
Uma descrição amigável de como esse token é usado. |
|
| --groups strings Padrão: "system:bootstrappers:kubeadm:default-node-token" | |
Grupos extras que este token autenticará quando usado para autenticação. Deve corresponder "\Asystem:bootstrappers:[a-z0-9:-]{0,255}[a-z0-9]\z" |
|
| -h, --help | |
ajuda para create |
|
| --print-join-command | |
Em vez de exibir apenas o token, exibe a flag completa 'kubeadm join' necessária para se associar ao cluster usando o token. |
|
| --ttl duração Padrão: 24h0m0s | |
A duração antes do token ser excluído automaticamente (por exemplo, 1s, 2m, 3h). Se definido como '0', o token nunca expirará |
|
| --usages strings Padrão: "signing,authentication" | |
Descreve as maneiras pelas quais esse token pode ser usado. Você pode passar --usages várias vezes ou fornecer uma lista de opções separada por vírgulas. Opções válidas: [signing,authentication] |
|
| --dry-run | |
Ativar ou não o modo de execução dry-run |
|
| --kubeconfig string Padrão: "/etc/kubernetes/admin.conf" | |
O arquivo kubeconfig a ser usado para se comunicar com o cluster. Se a flag não estiver definida, um conjunto de locais predefinidos pode ser pesquisado por um arquivo kubeconfig existente. |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o 'real' sistema de arquivos raiz do host. |
|
Excluir tokens de inicialização no servidor
Este comando excluirá uma lista de tokens de inicialização para você.
O [token-value] é um Token completo na forma "[a-z0-9]{6}.[a-z0-9]{16}" ou o ID do Token na forma "[a-z0-9]{6}" a ser excluído.
kubeadm token delete [token-value] ...
| -h, --help | |
ajuda para delete |
|
| --dry-run | |
Ativar ou não o modo de execução dry-run |
|
| --kubeconfig string Padrão: "/etc/kubernetes/admin.conf" | |
O arquivo kubeconfig a ser usado para se comunicar com o cluster. Se a flag não estiver definida, um conjunto de locais predefinidos pode ser pesquisado por um arquivo kubeconfig existente. |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o 'real' sistema de arquivos raiz do host. |
|
Gere e exiba um token de inicialização, mas não o crie no servidor
Este comando exibirá um token de inicialização gerado aleatoriamente que pode ser usado com os comandos "init" e "join".
Você não precisa usar este comando para gerar um token. Você pode fazer isso sozinho, desde que esteja no formato "[a-z0-9]{6}.[a-z0-9]{16}". Este comando é fornecido por conveniência para gerar tokens no formato fornecido.
Você também pode usar "kubeadm init" sem especificar um token e ele gerará e exibirá um para você.
kubeadm token generate [flags]
| -h, --help | |
ajuda para generate |
|
| --dry-run | |
Ativar ou não o modo de execução dry-run |
|
| --kubeconfig string Padrão: "/etc/kubernetes/admin.conf" | |
O arquivo kubeconfig a ser usado para se comunicar com o cluster. Se a flag não estiver definida, um conjunto de locais predefinidos pode ser pesquisado por um arquivo kubeconfig existente. |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o 'real' sistema de arquivos raiz do host. |
|
Liste tokens de inicialização no servidor
Este comando listará todos os tokens de inicialização para você
kubeadm token list [flags]
| --allow-missing-template-keys Padrão: true | |
Se verdadeiro (true), ignora quaisquer erros nos modelos quando um campo ou chave de mapa estiver faltando no modelo. Aplica-se apenas aos formatos de saída golang e jsonpath. |
|
| -o, --experimental-output string Padrão: "text" | |
Formato de saída. Valores válidos: text|json|yaml|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file. |
|
| -h, --help | |
ajuda para list |
|
| --show-managed-fields | |
Se verdadeiro (true), mantém os managedFields ao exibir os objetos no formato JSON ou YAML. |
|
| --dry-run | |
Ativar ou não o modo de execução dry-run |
|
| --kubeconfig string Padrão: "/etc/kubernetes/admin.conf" | |
O arquivo kubeconfig a ser usado para se comunicar com o cluster. Se a flag não estiver definida, um conjunto de locais predefinidos pode ser pesquisado por um arquivo kubeconfig existente. |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o 'real' sistema de arquivos raiz do host. |
|
Este comando exibe a versão do kubeadm.
Exibe a versão do kubeadm
Exibe a versão do kubeadm
kubeadm version [flags]
| -h, --help | |
ajuda para version |
|
| -o, --output string | |
Formato de saída; as opções disponíveis são 'yaml', 'json' e 'short' |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o 'real' sistema de arquivos raiz do host. |
|
kubeadm alpha fornece uma prévia de um conjunto de recursos disponibilizados para coletar feedback da comunidade. Por favor, experimente e nos dê seu feedback!Atualmente, não há comandos experimentais sob o kubeadm alpha.
worker do Kubernetes e associá-lo ao clusterkubeadm init ou kubeadm joinO kubeadm certs fornece os utilitários para gerenciar os certificados. Para obter mais detalhes sobre como esses comandos podem ser usados, consulte Gerenciamento de Certificados com o kubeadm.
Um conjunto de utilitários para usar os certificados Kubernetes
Comandos relacionados ao manuseio de certificados kubernetes
Comandos relacionados ao manuseio de certificados kubernetes
| -h, --help | |
ajuda para certs |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o 'real' sistema de arquivos raiz do host. |
|
Você pode renovar todos os certificados Kubernetes usando o subcomando all ou renová-los seletivamente. Para mais detalhes, consulte Manual de renovação do certificado.
Renove certificados para um cluster Kubernetes
Este comando não deve ser executado sozinho. Veja a lista de subcomandos disponíveis.
kubeadm certs renew [flags]
| -h, --help | |
ajuda para renew |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o 'real' sistema de arquivos raiz do host. |
|
Renovar todos os certificados disponíveis
Renove todos os certificados conhecidos e necessários para executar a camada de gerenciamento. As renovações são executadas incondicionalmente, independentemente da data de expiração. As renovações também podem ser executadas individualmente para obter mais controle.
kubeadm certs renew all [flags]
| --cert-dir string Padrão: "/etc/kubernetes/pki" | |
O caminho para salvar os certificados |
|
| --config string | |
Caminho para um arquivo de configuração kubeadm. |
|
| -h, --help | |
ajuda para all |
|
| --kubeconfig string Padrão: "/etc/kubernetes/admin.conf" | |
O arquivo kubeconfig a ser usado para se comunicar com o cluster. Se a flag não estiver definida, um conjunto de locais predefinidos pode ser pesquisado por um arquivo kubeconfig existente. |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o 'real' sistema de arquivos raiz do host. |
|
Renove o certificado incorporado no arquivo kubeconfig para o administrador e o kubeadm usarem
Renove o certificado incorporado no arquivo kubeconfig para o administrador e o kubeadm usarem.
As renovações são executadas incondicionalmente, independentemente da data de expiração do certificado; atributos extras, como SANs, serão baseados no arquivo/certificados existentes, não há necessidade de informá-los novamente.
A renovação, por padrão, tenta usar a autoridade de certificação na PKI local gerenciada pelo kubeadm; como alternativa, é possível usar a API de certificados do K8s para renovação de certificado, ou como última opção, para gerar uma solicitação CSR.
Após a renovação, para tornar as alterações efetivas, é necessário reiniciar os componentes da camada de gerenciamento e, eventualmente, redistribuir o certificado renovado, caso o arquivo seja usado em outro lugar.
kubeadm certs renew admin.conf [flags]
| --cert-dir string Padrão: "/etc/kubernetes/pki" | |
O caminho para salvar os certificados. |
|
| --config string | |
O caminho para um arquivo de configuração kubeadm. |
|
| -h, --help | |
ajuda para o admin.conf |
|
| --kubeconfig string Padrão: "/etc/kubernetes/admin.conf" | |
O arquivo kubeconfig a ser usado para se comunicar com o cluster. Se a flag não estiver definida, um conjunto de locais predefinidos pode ser pesquisado por um arquivo kubeconfig existente. |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o 'real' sistema de arquivos raiz do host. |
|
Renove o certificado que o apiserver usa para acessar o etcd.
Renove o certificado que o apiserver usa para acessar o etcd.
As renovações são executadas incondicionalmente, independentemente da data de expiração do certificado; atributos extras, como SANs, serão baseados no arquivo/certificados existentes, não há necessidade de informá-los novamente.
A renovação, por padrão, tenta usar a autoridade de certificação na PKI local gerenciada pelo kubeadm; como alternativa, é possível usar a API de certificado K8s para renovação do certificado, ou como última opção, para gerar uma solicitação CSR.
Após a renovação, para tornar as alterações efetivas, é necessário reiniciar os componentes da camada de gerenciamento e, eventualmente, redistribuir o certificado renovado, caso o arquivo seja usado em outro lugar.
kubeadm certs renew apiserver-etcd-client [flags]
| --cert-dir string Padrão: "/etc/kubernetes/pki" | |
O caminho para salvar os certificados |
|
| --config string | |
Caminho para um arquivo de configuração kubeadm. |
|
| -h, --help | |
ajuda para apiserver-etcd-client |
|
| --kubeconfig string Padrão: "/etc/kubernetes/admin.conf" | |
O arquivo kubeconfig a ser usado para se comunicar com o cluster. Se a flag não estiver definida, um conjunto de locais predefinidos pode ser pesquisado por um arquivo kubeconfig existente. |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o 'real' sistema de arquivos raiz do host. |
|
Renove o certificado para o servidor API se conectar ao kubelet
Renove o certificado para o servidor da API se conectar ao kubelet.
As renovações são executadas incondicionalmente, independentemente da data de expiração do certificado; atributos extras, como SANs, serão baseados no arquivo/certificados existentes, não há necessidade de informá-los novamente.
A renovação, por padrão, tenta usar a autoridade de certificação na PKI local gerenciada pelo kubeadm; como alternativa, é possível usar a API de certificado do K8s para renovação de certificado, ou como última opção, para gerar uma solicitação CSR.
Após a renovação, para tornar as alterações efetivas, é necessário reiniciar os componentes da camada de gerenciamento e, eventualmente, redistribuir o certificado renovado, caso o arquivo seja usado em outro lugar.
kubeadm certs renew apiserver-kubelet-client [flags]
| --cert-dir string Padrão: "/etc/kubernetes/pki" | |
O caminho para salvar os certificados |
|
| --config string | |
Caminho para um arquivo de configuração kubeadm. |
|
| -h, --help | |
ajuda para apiserver-kubelet-client |
|
| --kubeconfig string Padrão: "/etc/kubernetes/admin.conf" | |
O arquivo kubeconfig a ser usado para se comunicar com o cluster. Se a flag não estiver definida, um conjunto de locais predefinidos pode ser pesquisado por um arquivo kubeconfig existente. |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o 'real' sistema de arquivos raiz do host. |
|
Renove o certificado para servir a API do Kubernetes
Renove o certificado para servir a API do Kubernetes.
As renovações são executadas incondicionalmente, independentemente da data de expiração do certificado; atributos extras, como SANs, serão baseados no arquivo/certificados existentes, não há necessidade de informá-los novamente.
A renovação, por padrão, tenta usar a autoridade de certificação na PKI local gerenciada pelo kubeadm; como alternativa, é possível usar o certificado K8s da API para renovação de certificado, ou como última opção, para gerar uma solicitação CSR.
Após a renovação, para tornar as alterações efetivas, é necessário reiniciar os componentes da camada de gerenciamento e, eventualmente, redistribuir o certificado renovado, caso o arquivo seja usado em outro lugar.
kubeadm certs renew apiserver [flags]
| --cert-dir string Default: "/etc/kubernetes/pki" | |
O caminho para salvar os certificados |
|
| --config string | |
Caminho para um arquivo de configuração kubeadm. |
|
| -h, --help | |
ajuda para apiserver |
|
| --kubeconfig string Padrão: "/etc/kubernetes/admin.conf" | |
O arquivo kubeconfig a ser usado para se comunicar com o cluster. Se a flag não estiver definida, um conjunto de locais predefinidos pode ser pesquisado por um arquivo kubeconfig existente. |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o 'real' sistema de arquivos raiz do host. |
|
Renove o certificado incorporado no arquivo kubeconfig para o uso do gerenciador de controladores.
Renove o certificado incorporado no arquivo kubeconfig para o uso do gerenciador de controladores.
As renovações são executadas incondicionalmente, independentemente da data de expiração do certificado; atributos extras, como SANs, serão baseados no arquivo/certificados existentes, não há necessidade de informá-los novamente.
A renovação, por padrão, tenta usar a autoridade de certificação na PKI local gerenciada pelo kubeadm; como alternativa, é possível usar o certificado K8s da API para renovação de certificado, ou como última opção, para gerar uma solicitação CSR.
Após a renovação, para tornar as alterações efetivas, é necessário reiniciar os componentes da camada de gerenciamento e, eventualmente, redistribuir o certificado renovado, caso o arquivo seja usado em outro lugar.
kubeadm certs renew controller-manager.conf [flags]
| --cert-dir string Padrão: "/etc/kubernetes/pki" | |
O caminho para salvar os certificados |
|
| --config string | |
Caminho para um arquivo de configuração kubeadm. |
|
| -h, --help | |
ajuda para controller-manager.conf |
|
| --kubeconfig string Padrão: "/etc/kubernetes/admin.conf" | |
O arquivo kubeconfig a ser usado para se comunicar com o cluster. Se a flag não estiver definida, um conjunto de locais predefinidos pode ser pesquisado por um arquivo kubeconfig existente. |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o 'real' sistema de arquivos raiz do host. |
|
Renove o certificado para liveness probes para verificar a integridade do etcd
Renove o certificado para liveness probes para verificar a integridade do etcd.
As renovações são executadas incondicionalmente, independentemente da data de expiração do certificado; atributos extras, como SANs, serão baseados no arquivo/certificados existentes, não há necessidade de informá-los novamente.
A renovação, por padrão, tenta usar a autoridade de certificação na PKI local gerenciada pelo kubeadm; como alternativa, é possível usar o certificado K8s da API para renovação de certificado, ou como última opção, para gerar uma solicitação CSR.
Após a renovação, para tornar as alterações efetivas, é necessário reiniciar os componentes da camada de gerenciamento e, eventualmente, redistribuir o certificado renovado, caso o arquivo seja usado em outro lugar.
kubeadm certs renew etcd-healthcheck-client [flags]
| --cert-dir string Padrão: "/etc/kubernetes/pki" | |
O caminho para salvar os certificados |
|
| --config string | |
Caminho para um arquivo de configuração kubeadm. |
|
| -h, --help | |
ajuda para etcd-healthcheck-client |
|
| --kubeconfig string Padrão: "/etc/kubernetes/admin.conf" | |
O arquivo kubeconfig a ser usado para se comunicar com o cluster. Se a flag não estiver definida, um conjunto de locais predefinidos pode ser pesquisado por um arquivo kubeconfig existente. |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o 'real' sistema de arquivos raiz do host. |
|
Renove o certificado para nós etcd se comunicarem uns com os outros
Renove o certificado para nós etcd se comunicarem uns com os outros.
As renovações são executadas incondicionalmente, independentemente da data de expiração do certificado; atributos extras, como SANs, serão baseados no arquivo/certificados existentes, não há necessidade de informá-los novamente.
A renovação, por padrão, tenta usar a autoridade de certificação na PKI local gerenciada pelo kubeadm; como alternativa, é possível usar o certificado K8s da API para renovação de certificado, ou como última opção, para gerar uma solicitação CSR.
Após a renovação, para tornar as alterações efetivas, é necessário reiniciar os componentes da camada de gerenciamento e, eventualmente, redistribuir o certificado renovado, caso o arquivo seja usado em outro lugar.
kubeadm certs renew etcd-peer [flags]
| --cert-dir string Padrão: "/etc/kubernetes/pki" | |
O caminho para salvar os certificados |
|
| --config string | |
Caminho para um arquivo de configuração kubeadm. |
|
| -h, --help | |
ajuda para etcd-peer |
|
| --kubeconfig string Padrão: "/etc/kubernetes/admin.conf" | |
O arquivo kubeconfig a ser usado para se comunicar com o cluster. Se a flag não estiver definida, um conjunto de locais predefinidos pode ser pesquisado por um arquivo kubeconfig existente. |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o 'real' sistema de arquivos raiz do host. |
|
Renove o certificado para servir o etcd
Renove o certificado para servir o etcd.
As renovações são executadas incondicionalmente, independentemente da data de expiração do certificado; atributos extras, como SANs, serão baseados no arquivo/certificados existentes, não há necessidade de informá-los novamente.
A renovação, por padrão, tenta usar a autoridade de certificação na PKI local gerenciada pelo kubeadm; como alternativa, é possível usar o certificado K8s da API para renovação de certificado, ou como última opção, para gerar uma solicitação CSR.
Após a renovação, para tornar as alterações efetivas, é necessário reiniciar os componentes da camada de gerenciamento e, eventualmente, redistribuir o certificado renovado, caso o arquivo seja usado em outro lugar.
kubeadm certs renew etcd-server [flags]
| --cert-dir string Padrão: "/etc/kubernetes/pki" | |
O caminho para salvar os certificados |
|
| --config string | |
Caminho para um arquivo de configuração kubeadm. |
|
| -h, --help | |
ajuda para etcd-server |
|
| --kubeconfig string Padrão: "/etc/kubernetes/admin.conf" | |
O arquivo kubeconfig a ser usado para se comunicar com o cluster. Se a flag não estiver definida, um conjunto de locais predefinidos pode ser pesquisado por um arquivo kubeconfig existente. |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o 'real' sistema de arquivos raiz do host. |
|
Renove o certificado para o cliente front proxy
Renove o certificado para o cliente front proxy.
As renovações são executadas incondicionalmente, independentemente da data de expiração do certificado; atributos extras, como SANs, serão baseados no arquivo/certificados existentes, não há necessidade de informá-los novamente.
A renovação, por padrão, tenta usar a autoridade de certificação na PKI local gerenciada pelo kubeadm; como alternativa, é possível usar o certificado K8s da API para renovação de certificado, ou como última opção, para gerar uma solicitação CSR.
Após a renovação, para tornar as alterações efetivas, é necessário reiniciar os componentes da camada de gerenciamento e, eventualmente, redistribuir o certificado renovado, caso o arquivo seja usado em outro lugar.
kubeadm certs renew front-proxy-client [flags]
| --cert-dir string Padrão: "/etc/kubernetes/pki" | |
O caminho para salvar os certificados |
|
| --config string | |
Caminho para um arquivo de configuração kubeadm. |
|
| -h, --help | |
ajuda para front-proxy-client |
|
| --kubeconfig string Padrão: "/etc/kubernetes/admin.conf" | |
O arquivo kubeconfig a ser usado para se comunicar com o cluster. Se a flag não estiver definida, um conjunto de locais predefinidos pode ser pesquisado por um arquivo kubeconfig existente. |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o 'real' sistema de arquivos raiz do host. |
|
Renove o certificado incorporado no arquivo kubeconfig para o gerenciador de agendamento usar
Renove o certificado incorporado no arquivo kubeconfig para o gerenciador de agendamento usar.
As renovações são executadas incondicionalmente, independentemente da data de expiração do certificado; atributos extras, como SANs, serão baseados no arquivo/certificados existentes, não há necessidade de informá-los novamente.
A renovação, por padrão, tenta usar a autoridade de certificação na PKI local gerenciada pelo kubeadm; como alternativa, é possível usar o certificado K8s da API para renovação de certificado, ou como última opção, para gerar uma solicitação CSR.
Após a renovação, para tornar as alterações efetivas, é necessário reiniciar os componentes da camada de gerenciamento e, eventualmente, redistribuir o certificado renovado, caso o arquivo seja usado em outro lugar.
kubeadm certs renew scheduler.conf [flags]
| --cert-dir string Padrão: "/etc/kubernetes/pki" | |
O caminho para salvar os certificados |
|
| --config string | |
Caminho para um arquivo de configuração kubeadm. |
|
| -h, --help | |
ajuda para scheduler.conf |
|
| --kubeconfig string Padrão: "/etc/kubernetes/admin.conf" | |
O arquivo kubeconfig a ser usado para se comunicar com o cluster. Se a flag não estiver definida, um conjunto de locais predefinidos pode ser pesquisado por um arquivo kubeconfig existente. |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o 'real' sistema de arquivos raiz do host. |
|
Este comando pode ser usado para gerar uma nova chave do certificado da camada de gerenciamento. A chave pode ser passada como --certificate-key to kubeadm init e kubeadm join para permitir uma cópia automática dos certificados ao unir nós adicionais a camada de gerenciamento.
Gerar as chaves de certificado
Este comando exibirá uma chave de certificado segura gerada aleatoriamente que pode ser usada com o comando "init".
Você também pode usar "kubeadm init --upload-certs" sem especificar uma chave de certificado e ela irá gerar e exibir uma para você.
kubeadm certs certificate-key [flags]
| -h, --help | |
ajuda para certificate-key |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o 'real' sistema de arquivos raiz do host. |
|
Este comando verifica a expiração dos certificados na PKI local gerenciada pelo kubeadm. Para mais detalhes, consulte Verificar a expiração do certificado.
Verifique a expiração dos certificados para um cluster Kubernetes
Verifica a expiração dos certificados PKI local gerenciados pelo kubeadm.
kubeadm certs check-expiration [flags]
| --cert-dir string Padrão: "/etc/kubernetes/pki" | |
O caminho para salvar os certificados |
|
| --config string | |
Caminho para um arquivo de configuração kubeadm. |
|
| -h, --help | |
ajuda para check-expiration |
|
| --kubeconfig string Padrão: "/etc/kubernetes/admin.conf" | |
O arquivo kubeconfig usado na comunicação com o cluster. Se a flag não estiver definida, um conjunto de locais padrão pode ser pesquisado em busca de um arquivo kubeconfig existente. |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o 'real' sistema de arquivos raiz do host. |
|
Este comando pode ser usado para gerar chaves e CSRs para todos os certificados da camada de gerenciamento e arquivos kubeconfig. O usuário pode então assinar os CSRs com uma autoridade de certificação de sua escolha.
Gerar chaves e solicitações de assinatura de certificados
Gera as chaves e as solicitações de assinatura de certificados (CSRs) para todos os certificados necessários para executar a camada de gerenciamento. Este comando também gera os arquivos kubeconfig parciais com dados de chave privada no campo "users > user > client-key-data" e, para cada arquivo kubeconfig, um arquivo ".csr" correspondente é criado.
Esse comando foi projetado para uso no modo de CA externo do Kubeadm. Ele gera CSRs que você pode enviar à sua autoridade de certificação externa para assinatura.
Os certificados PEM assinados e codificados devem ser salvos juntamente com os arquivos da chave, usando ".crt" como extensão de arquivo ou, no caso de arquivos kubeconfig, o certificado assinado codificado no formato PEM deve ser codificado em base64 e adicionado ao arquivo kubeconfig no campo "users > user > client-certificate-data".
kubeadm certs generate-csr [flags]
# O comando a seguir gera as chaves e CSRs para todos os certificados do plano de controle e arquivos kubeconfig:
kubeadm certs generate-csr --kubeconfig-dir /tmp/etc-k8s --cert-dir /tmp/etc-k8s/pki
| --cert-dir string | |
O caminho para salvar os certificados |
|
| --config string | |
Caminho para um arquivo de configuração kubeadm. |
|
| -h, --help | |
ajuda para generate-csr |
|
| --kubeconfig-dir string Padrão: "/etc/kubernetes" | |
O caminho para salvar o arquivo kubeconfig. |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o 'real' sistema de arquivos raiz do host. |
|
kubeadm init ou kubeadm joinkubeadm kubeconfig fornece utilitários para gerenciar arquivos kubeconfig.
Para exemplos de uso do comando kubeadm kubeconfig user, consulte Gerando arquivos kubeconfig para usuários adicionais.
Utilitários de arquivo Kubeconfig
Utilitários de arquivo Kubeconfig.
| -h, --help | |
ajuda para kubeconfig |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o 'real' sistema de arquivos raiz do host. |
|
Esse comando pode ser usado para gerar um arquivo kubeconfig para um usuário adicional.
Saída do arquivo kubeconfig para um usuário adicional.
Exibe o arquivo kubeconfig para um usuário adicional.
kubeadm kubeconfig user [flags]
# Exibe um arquivo kubeconfig para um usuário adicional chamado foo usando um arquivo bar de configuração
kubeadm kubeconfig user --client-name=foo --config=bar
| --client-name string | |
O nome do usuário. Será usado como CN se os certificados do cliente forem criados. |
|
| --config string | |
Caminho para um arquivo de configuração kubeadm. |
|
| -h, --help | |
ajuda para user |
|
| --org strings | |
As organizações do certificado do cliente. Será usado como O se os certificados de cliente forem criados. |
|
| --token string | |
O token que deve ser usado como mecanismo de autenticação para esse kubeconfig, em vez de certificados de cliente |
|
| --validity-period duração Padrão: 8760h0m0s | |
O período de validade do certificado do cliente. É um deslocamento da hora atual. |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o 'real' sistema de arquivos raiz do host. |
|
Na versão v1.15.0, o kubeadm introduziu suporte preliminar para as fases kubeadm upgrade node. Fases para outros subcomandos kubeadm upgrade, tal como apply, podem ser adicionadas nas seguintes versões.
Usando essa fase, você pode optar por executar as etapas separadas da atualização de nós, sejam eles nós secundários da camada de gerenciamento ou nós de execução de cargas de trabalho. Observe que kubeadm upgrade apply ainda precisa ser chamado em um nó principal da camada de gerenciamento.
Use este comando para invocar uma fase única do fluxo de trabalho do nó
Use este comando para invocar uma fase única do fluxo de trabalho do nó
| -h, --help | |
ajuda para fase |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o 'real' sistema de arquivos raiz do host. |
|
Execute verificações antes de atualização do nó
Execute verificações antes de atualização do nó
kubeadm upgrade node phase preflight [flags]
| -h, --help | |
ajuda para preflight |
|
| --ignore-preflight-errors strings | |
Uma lista de verificações cujos erros serão mostrados como avisos. Exemplo: 'IsPrivilegedUser,Swap'. O valor 'all' ignora erros de todas as verificações. |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o 'real' sistema de arquivos raiz do host. |
|
Atualiza a instância da camada de gerenciamento instalada nesse nó, se houver
Atualiza a instância da camada de gerenciamento instalada nesse nó, se houver
kubeadm upgrade node phase control-plane [flags]
| --certificate-renewal Padrão: true | |
Executa a renovação dos certificados usados pelo componente alterado durante as atualizações. |
|
| --dry-run | |
Não altera nenhum estado, apenas produz as ações que seriam executadas. |
|
| --etcd-upgrade Padrão: true | |
Atualiza o etcd. |
|
| -h, --help | |
ajuda para o comando control-plane |
|
| --kubeconfig string Padrão: "/etc/kubernetes/admin.conf" | |
O arquivo kubeconfig a ser usado para se comunicar com o cluster. Se a flag não estiver definida, uma série de locais predefinidos pode ser pesquisado por um arquivo kubeconfig existente. |
|
| --patches string | |
O caminho para um diretório que contém arquivos chamados "target[suffix][+patchtype].extension". Por exemplo, "kube-apiserver0+merge.yaml" ou apenas "etcd.json". "target" são "kube-apiserver", "kube-controller-manager", "kube-scheduler", "etcd". "patchtype" pode ser um dos "strategic", "merge" or "json"e eles correspondem aos formatos de patch suportados pelo kubectl. O padrão "patchtype" é "strategic". "extension" deve ser "json" ou "yaml". "suffix" é uma string opcional que pode ser usada para determinar a ordem de aplicação dos patches alfanumericamente. |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o 'real' sistema de arquivos raiz do host. |
|
Atualize a configuração do kubelet para este nó
Baixa no cluster o ConfigMap de configuração do kubelet no formato "kubelet-config-1.X", onde X é a menor versão do kubelet. O kubeadm usa o campo KuberneteVersion no ConfigMap kubeadm-config para determinar qual é a versão desejada do kubelet.
kubeadm upgrade node phase kubelet-config [flags]
| --dry-run | |
Não altera nenhum estado, apenas produz as ações que seriam executadas. |
|
| -h, --help | |
ajuda para kubelet-config |
|
| --kubeconfig string Padrão: "/etc/kubernetes/admin.conf" | |
O arquivo kubeconfig a ser usado para se comunicar com o cluster. Se a flag não estiver definida, uma série de locais predefinidos pode ser pesquisado por um arquivo kubeconfig existente. |
|
| --rootfs string | |
[EXPERIMENTAL] O caminho para o 'real' sistema de arquivos raiz do host. |
|
worker do Kubernetes e associá-lo ao clusterkubeadm init ou kubeadm joinQuando o Kubernetes está sendo executado em um ambiente com uma rede mais restritiva, como por exemplo um data center on-premises com firewalls de rede físicos ou redes virtuais em nuvens públicas, é útil saber quais portas e protocolos são utilizados pelos componentes do Kubernetes.
| Protocolo | Direção | Intervalo de Portas | Propósito | Utilizado por |
|---|---|---|---|---|
| TCP | Entrada | 6443 | Servidor da API do Kubernetes | Todos |
| TCP | Entrada | 2379-2380 | API servidor-cliente do etcd | kube-apiserver, etcd |
| TCP | Entrada | 10250 | API do kubelet | kubeadm, Camada de gerenciamento |
| TCP | Entrada | 10259 | kube-scheduler | kubeadm |
| TCP | Entrada | 10257 | kube-controller-manager | kubeadm |
Embora as portas do etcd estejam inclusas na seção da Camada de gerenciamento, você também pode hospedar o seu próprio cluster etcd externamente ou em portas customizadas.
| Protocolo | Direção | Intervalo de Portas | Propósito | Utilizado por |
|---|---|---|---|---|
| TCP | Entrada | 10250 | API do Kubelet | O próprio, Camada de gerenciamento |
| TCP | Entrada | 30000-32767 | Serviços NodePort† | Todos |
† Intervalo padrão de portas para os serviços NodePort.
Todas as portas padrão podem ser sobrescritas. Quando portas customizadas são utilizadas, essas portas precisam estar abertas, ao invés das mencionadas aqui.
Um exemplo comum é a porta do servidor da API, que as vezes é trocado para a porta 433. Com isso, a porta padrão é mantida e o servidor da API é colocado atrás de um balanceador de carga que escuta na porta 433 e faz o roteamento das requisições para o servidor da API na porta padrão.
Aprenda mais sobre autorização no Kubernetes, incluindo detalhes sobre criação de políticas utilizando módulos de autorização suportados.
No Kubernetes, você deve estar autenticado (conectado) antes que sua requisição possa ser autorizada (permissão concedida para acesso). Para obter informações sobre autenticação, visite Controlando Acesso à API do Kubernetes.
O Kubernetes espera atributos que são comuns a requisições de APIs REST. Isto significa que autorização no Kubernetes funciona com sistemas de controle de acesso a nível de organizações ou de provedores de nuvem que possam lidar com outras APIs além das APIs do Kubernetes.
O Kubernetes autoriza requisições de API utilizando o servidor de API. Ele avalia todos os atributos de uma requisição em relação a todas as políticas disponíveis e permite ou nega a requisição. Todas as partes de uma requisição de API deve ser permitidas por alguma política para que possa prosseguir. Isto significa que permissões são negadas por padrão.
(Embora o Kubernetes use o servidor de API, controles de acesso e políticas que dependem de campos específicos de tipos específicos de objetos são tratados pelos controladores de admissão.)
Quando múltiplos módulos de autorização são configurados, cada um será verificado em sequência. Se qualquer dos autorizadores aprovarem ou negarem uma requisição, a decisão é imediatamente retornada e nenhum outro autorizador é consultado. Se nenhum módulo de autorização tiver nenhuma opinião sobre requisição, então a requisição é negada. Uma negação retorna um código de status HTTP 403.
O Kubernetes revisa somente os seguintes atributos de uma requisição de API:
user fornecido durante a autenticação./api ou /healthz.get, list, create, update, patch, watch, delete e deletecollection que são utilizados para solicitações de recursos. Para determinar o verbo de requisição para um endpoint de recurso de API , consulte Determine o verbo da requisição.get, post, put e delete que são utilizados para requisições que não são de recursos.get, update, patch e delete, deve-se fornecer o nome do recurso.Requisições de não-recursos
Requisições sem recursos de /api/v1/... ou /apis/<group>/<version>/...
são considerados "requisições sem recursos" e usam o método HTTP em letras minúsculas da solicitação como o verbo.
Por exemplo, uma solicitação GET para endpoints como /api ou /healthz usaria get como o verbo.
Requisições de recursos Para determinar o verbo de requisição para um endpoint de API de recurso, revise o verbo HTTP utilizado e se a requisição atua ou não em um recurso individual ou em uma coleção de recursos:
| Verbo HTTP | Verbo de Requisição |
|---|---|
| POST | create |
| GET, HEAD | get (para recursos individuais), list (para coleções, includindo o conteúdo do objeto inteiro), watch (para observar um recurso individual ou coleção de recursos) |
| PUT | update |
| PATCH | patch |
| DELETE | delete (para recursos individuais), deletecollection (para coleções) |
get, list e watch podem retornar todos os detalhes de um recurso. Eles são equivalentes em relação aos dados retornados. Por exemplo, list em secrets revelará os atributos de data de qualquer recurso retornado.Às vezes, o Kubernetes verifica a autorização para permissões adicionais utilizando verbos especializados. Por exemplo:
use em recursos podsecuritypolicies no grupo policy de API.bind e escalate em roles e recursos clusterroles no grupo rbac.authorization.k8s.io de API.impersonate em users, groups, e serviceaccounts no grupo de API core, e o userextras no grupo authentication.k8s.io de API.O servidor da API Kubernetes pode autorizar uma solicitação usando um dos vários modos de autorização:
kubelets com base nos Pods que estão programados para execução. Para saber mais sobre como utilizar o modo de autorização do nó, consulte Node Authorization.rbac.authorization.k8s.io para orientar as decisões de autorização, permitindo que os administradores configurem dinamicamente as políticas de permissão por meio da API do Kubernetes.--authorization-mode=RBAC.kubectl fornece o subcomando auth can-i para consultar rapidamente a camada de autorização da API.
O comando usa a API SelfSubjectAccessReview para determinar se o usuário atual pode executar
uma determinada ação e funciona independentemente do modo de autorização utilizado.
# "can-i create" = "posso criar"
kubectl auth can-i create deployments --namespace dev
A saída é semelhante a esta:
yes
# "can-i create" = "posso criar"
kubectl auth can-i create deployments --namespace prod
A saída é semelhante a esta:
no
Os administradores podem combinar isso com personificação de usuário para determinar qual ação outros usuários podem executar.
# "can-i list" = "posso listar"
kubectl auth can-i list secrets --namespace dev --as dave
A saída é semelhante a esta:
no
Da mesma forma, para verificar se uma ServiceAccount chamada dev-sa no Namespace dev
pode listar Pods no namespace target:
# "can-i list" = "posso listar"
kubectl auth can-i list pods \
--namespace target \
--as system:serviceaccount:dev:dev-sa
A saída é semelhante a esta:
yes
SelfSubjectAccessReview faz parte do grupo de API authorization.k8s.io, que
expõe a autorização do servidor de API para serviços externos. Outros recursos
neste grupo inclui:
SubjectAccessReview - Revisão de acesso para qualquer usuário, não apenas o atual. Útil para delegar decisões de autorização para o servidor de API. Por exemplo, o kubelet e extensões de servidores de API utilizam disso para determinar o acesso do usuário às suas próprias APIs.
LocalSubjectAccessReview - Similar a SubjectAccessReview, mas restrito a um namespace específico.
SelfSubjectRulesReview - Uma revisão que retorna o conjunto de ações que um usuário pode executar em um namespace. Útil para usuários resumirem rapidamente seu próprio acesso ou para interfaces de usuário mostrarem ações.
Essas APIs podem ser consultadas criando recursos normais do Kubernetes, onde a resposta no campo status
do objeto retornado é o resultado da consulta.
kubectl create -f - -o yaml << EOF
apiVersion: authorization.k8s.io/v1
kind: SelfSubjectAccessReview
spec:
resourceAttributes:
group: apps
resource: deployments
verb: create
namespace: dev
EOF
A SelfSubjectAccessReview gerada seria:
apiVersion: authorization.k8s.io/v1
kind: SelfSubjectAccessReview
metadata:
creationTimestamp: null
spec:
resourceAttributes:
group: apps
resource: deployments
namespace: dev
verb: create
status:
allowed: true
denied: false
Você deve incluir uma flag em sua política para indicar qual módulo de autorização suas políticas incluem:
As seguintes flags podem ser utilizadas:
--authorization-mode=ABAC O modo de controle de acesso baseado em atributos (ABAC) permite configurar políticas usando arquivos locais.--authorization-mode=RBAC O modo de controle de acesso baseado em função (RBAC) permite que você crie e armazene políticas usando a API do Kubernetes.--authorization-mode=Webhook WebHook é um modo de retorno de chamada HTTP que permite gerenciar a autorização usando endpoint REST.--authorization-mode=Node A autorização de nó é um modo de autorização de propósito especial que autoriza especificamente requisições de API feitas por kubelets.--authorization-mode=AlwaysDeny Esta flag bloqueia todas as requisições. Utilize esta flag somente para testes.--authorization-mode=AlwaysAllow Esta flag permite todas as requisições. Utilize esta flag somente se não existam requisitos de autorização para as requisições de API.Você pode escolher mais de um modulo de autorização. Módulos são verificados em ordem, então, um modulo anterior tem maior prioridade para permitir ou negar uma requisição.
Usuários que podem criar ou editar pods em um namespace diretamente ou através de um controlador
como, por exemplo, um operador, conseguiriam escalar seus próprios privilégios naquele namespace.
Para reportar um problema de segurança, siga processo de divulgação de segurança do Kubernetes.
O trabalho no código do Kubernetes e os problemas de segurança podem ser encontrados usando issues do GitHub.
Anúncios relacionados à segurança são enviados para a lista de discussão kubernetes-security-announce@googlegroups.com.
Kubernetes v1.27 [beta]
Esta é uma lista, mantida pela comunidade, de CVEs oficiais anunciadas pelo Comitê de Resposta de Segurança do Kubernetes. Veja Informações de Segurança e Divulgação do Kubernetes para mais detalhes.
O projeto Kubernetes publica um Feed JSON, que pode ser programaticamente acessado, de questões de segurança publicadas. Você pode acessá-lo executando o seguinte comando:
curl -Lv https://k8s.io/docs/reference/issues-security/official-cve-feed/index.json
| ID da CVE | Resumo da issue | URL da issue relacionada à CVE no GitHub |
|---|---|---|
| CVE-2026-4342 | ingress-nginx comment-based nginx configuration injection | #137893 |
| CVE-2026-3864 | CSI Driver for NFS path traversal via subDir may delete unintended directories on the NFS server | #137797 |
| CVE-2025-15566 | ingress-nginx auth-proxy-set-headers nginx configuration injection | #136789 |
| CVE-2026-24514 | ingress-nginx Admission Controller denial of service | #136680 |
| CVE-2026-24513 | ingress-nginx auth-url protection bypass | #136679 |
| CVE-2026-24512 | ingress-nginx rules.http.paths.path nginx configuration injection | #136678 |
| CVE-2026-1580 | ingress-nginx auth-method nginx configuration injection | #136677 |
| CVE-2025-14269 | Credential caching in Headlamp with Helm enabled | #135798 |
| CVE-2025-13281 | Portworx Half-Blind SSRF in kube-controller-manager | #135525 |
| CVE-2025-9708 | Kubernetes C# Client: improper certificate validation in custom CA mode may lead to man-in-the-middle attacks | #134063 |
| CVE-2025-7445 | secrets-store-sync-controller discloses service account tokens in logs | #133897 |
| CVE-2025-5187 | Nodes can delete themselves by adding an OwnerReference | #133471 |
| CVE-2025-7342 | VM images built with Kubernetes Image Builder Nutanix or OVA providers use default credentials for Windows images if user did not override | #133115 |
| CVE-2025-4563 | Nodes can bypass dynamic resource allocation authorization checks | #132151 |
| CVE-2025-1974 | ingress-nginx admission controller RCE escalation | #131009 |
| CVE-2025-1098 | ingress-nginx controller configuration injection via unsanitized mirror annotations | #131008 |
| CVE-2025-1097 | ingress-nginx controller configuration injection via unsanitized auth-tls-match-cn annotation | #131007 |
| CVE-2025-24514 | ingress-nginx controller configuration injection via unsanitized auth-url annotation | #131006 |
| CVE-2025-24513 | ingress-nginx controller auth secret file path traversal vulnerability | #131005 |
| CVE-2025-1767 | GitRepo Volume Inadvertent Local Repository Access | #130786 |
| CVE-2025-0426 | Node Denial of Service via kubelet Checkpoint API | #130016 |
| CVE-2024-9042 | Command Injection affecting Windows nodes via nodes/*/logs/query API | #129654 |
| CVE-2024-10220 | Arbitrary command execution through gitRepo volume | #128885 |
| CVE-2024-9594 | VM images built with Image Builder with some providers use default credentials during builds | #128007 |
| CVE-2024-9486 | VM images built with Image Builder and Proxmox provider use default credentials | #128006 |
| CVE-2024-7646 | Ingress-nginx Annotation Validation Bypass | #126744 |
| CVE-2024-7598 | Network restriction bypass via race condition during namespace termination | #126587 |
| CVE-2024-5321 | Incorrect permissions on Windows containers logs | #126161 |
| CVE-2024-3744 | azure-file-csi-driver discloses service account tokens in logs | #124759 |
| CVE-2024-3177 | Bypassing mountable secrets policy imposed by the ServiceAccount admission plugin | #124336 |
| CVE-2023-5528 | Insufficient input sanitization in in-tree storage plugin leads to privilege escalation on Windows nodes | #121879 |
| CVE-2023-5044 | Code injection via nginx.ingress.kubernetes.io/permanent-redirect annotation | #126817 |
| CVE-2023-5043 | Ingress nginx annotation injection causes arbitrary command execution | #126816 |
| CVE-2022-4886 | ingress-nginx path sanitization can be bypassed | #126815 |
| CVE-2023-3955 | Insufficient input sanitization on Windows nodes leads to privilege escalation | #119595 |
| CVE-2023-3893 | Insufficient input sanitization on kubernetes-csi-proxy leads to privilege escalation | #119594 |
| CVE-2023-3676 | Insufficient input sanitization on Windows nodes leads to privilege escalation | #119339 |
| CVE-2023-2431 | Bypass of seccomp profile enforcement | #118690 |
| CVE-2023-2728 | Bypassing policies imposed by the ImagePolicyWebhook and bypassing mountable secrets policy imposed by the ServiceAccount admission plugin | #118640 |
| CVE-2023-2727 | Bypassing policies imposed by the ImagePolicyWebhook and bypassing mountable secrets policy imposed by the ServiceAccount admission plugin | #118640 |
| CVE-2023-2878 | secrets-store-csi-driver discloses service account tokens in logs | #118419 |
| CVE-2022-3294 | Node address isn't always verified when proxying | #113757 |
| CVE-2022-3162 | Unauthorized read of Custom Resources | #113756 |
| CVE-2022-3172 | Aggregated API server can cause clients to be redirected (SSRF) | #112513 |
| CVE-2021-25749 | `runAsNonRoot` logic bypass for Windows containers | #112192 |
| CVE-2021-25748 | Ingress-nginx `path` sanitization can be bypassed with newline character | #126814 |
| CVE-2021-25746 | Ingress-nginx directive injection via annotations | #126813 |
| CVE-2021-25745 | Ingress-nginx `path` can be pointed to service account token file | #126812 |
| CVE-2021-25742 | Ingress-nginx custom snippets allows retrieval of ingress-nginx serviceaccount token and secrets across all namespaces | #126811 |
| CVE-2021-25741 | Symlink Exchange Can Allow Host Filesystem Access | #104980 |
| CVE-2020-8561 | Webhook redirect in kube-apiserver | #104720 |
| CVE-2021-25740 | Endpoint & EndpointSlice permissions allow cross-Namespace forwarding | #103675 |
| CVE-2021-25737 | Holes in EndpointSlice Validation Enable Host Network Hijack | #102106 |
| CVE-2020-8562 | Bypass of Kubernetes API Server proxy TOCTOU | #101493 |
| CVE-2021-3121 | Processes may panic upon receipt of malicious protobuf messages | #101435 |
| CVE-2021-25735 | Validating Admission Webhook does not observe some previous fields | #100096 |
| CVE-2020-8554 | Man in the middle using LoadBalancer or ExternalIPs | #97076 |
| CVE-2020-8566 | Ceph RBD adminSecrets exposed in logs when loglevel >= 4 | #95624 |
| CVE-2020-8565 | Incomplete fix for CVE-2019-11250 allows for token leak in logs when logLevel >= 9 | #95623 |
| CVE-2020-8564 | Docker config secrets leaked when file is malformed and log level >= 4 | #95622 |
| CVE-2020-8563 | Secret leaks in kube-controller-manager when using vSphere provider | #95621 |
| CVE-2020-8557 | Node disk DOS by writing to container /etc/hosts | #93032 |
| CVE-2020-8559 | Privilege escalation from compromised node to cluster | #92914 |
| CVE-2020-8558 | Node setting allows for neighboring hosts to bypass localhost boundary | #92315 |
| CVE-2020-8555 | Half-Blind SSRF in kube-controller-manager | #91542 |
| CVE-2020-10749 | IPv4 only clusters susceptible to MitM attacks via IPv6 rogue router advertisements | #91507 |
| CVE-2019-11254 | kube-apiserver Denial of Service vulnerability from malicious YAML payloads | #89535 |
| CVE-2020-8552 | apiserver DoS (oom) | #89378 |
| CVE-2020-8551 | Kubelet DoS via API | #89377 |
| CVE-2020-8553 | ingress-nginx auth-type basic annotation vulnerability | #126818 |
| CVE-2019-11251 | kubectl cp symlink vulnerability | #87773 |
| CVE-2018-1002102 | Unvalidated redirect | #85867 |
| CVE-2019-11255 | CSI volume snapshot, cloning and resizing features can result in unauthorized volume data access or mutation | #85233 |
| CVE-2019-11253 | Kubernetes API Server JSON/YAML parsing vulnerable to resource exhaustion attack | #83253 |
| CVE-2019-11250 | Bearer tokens are revealed in logs (audit finding TOB-K8S-001) | #81114 |
| CVE-2019-11248 | /debug/pprof exposed on kubelet's healthz port | #81023 |
| CVE-2019-11249 | Incomplete fixes for CVE-2019-1002101 and CVE-2019-11246, kubectl cp potential directory traversal | #80984 |
| CVE-2019-11247 | API server allows access to custom resources via wrong scope | #80983 |
| CVE-2019-11245 | container uid changes to root after first restart or if image is already pulled to the node | #78308 |
| CVE-2019-11243 | rest.AnonymousClientConfig() does not remove the serviceaccount credentials from config created by rest.InClusterConfig() | #76797 |
| CVE-2019-11244 | `kubectl --http-cache=<world-accessible dir>` creates world-writeable cached schema files | #76676 |
| CVE-2019-1002100 | json-patch requests can exhaust apiserver resources | #74534 |
| CVE-2018-1002105 | proxy request handling in kube-apiserver can leave vulnerable TCP connections | #71411 |
| CVE-2018-1002101 | smb mount security issue | #65750 |
| CVE-2018-1002100 | Kubectl copy doesn't check for paths outside of it's destination directory. | #61297 |
| CVE-2017-1002102 | atomic writer volume handling allows arbitrary file deletion in host filesystem | #60814 |
| CVE-2017-1002101 | subpath volume mount handling allows arbitrary file access in host filesystem | #60813 |
| CVE-2017-1002100 | Azure PV should be Private scope not Container scope | #47611 |
| CVE-2017-1000056 | PodSecurityPolicy admission plugin authorizes incorrectly | #43459 |
Este feed é automaticamente atualizado, mas com um pequeno atraso perceptível (minutos a horas), desde o momento em que um CVE é anunciado até o momento em que é acessível neste feed.
A fonte deste feed é um conjunto de issues do GitHub, filtrado pelo rótulo controlado e restrito official-cve-feed. Os dados brutos são armazenados em um Google Cloud Bucket que é somente escrito por um pequeno número de membros confiáveis da Comunidade.
O controle de acesso baseado em atributos (ABAC) define um paradigma de controle de acesso onde os direitos de acesso são concedidos aos usuários por meio do uso de políticas que combinam atributos.
Especifique os parametros de inicialização --authorization-policy-file=NOME_DE_ALGUM_ARQUIVO e --authorization-mode=ABAC para habilitar o modo ABAC.
O formato do arquivo é de um objeto JSON por linha. Nele não deve haver lista ou mapa envolvente, apenas um mapa por linha.
Cada linha é um "objeto de política", onde cada objeto é um mapa com as seguintes propriedades:
apiVersion, tipo string; os valores válidos são "abac.authorization.kubernetes.io/v1beta1". Permite controle de versão e conversão do formato da política.kind, tipo string: os valores válidos são "Policy". Permite controle de versão e conversão do formato da política.spec definida para um mapa com as seguintes propriedades:
user, tipo string; a string de usuário de --token-auth-file. Se você especificar user, ele deve corresponder ao nome do usuário autenticado.group, tipo string; se você especificar group, ele deve corresponder a um dos grupos do usuário autenticado system:authenticated corresponde a todas as requisições autenticadas. system:unauthenticated corresponde a todas as requisições não autenticadas.apiGroup, tipo string; um grupo de API.
apps, networking.k8s.io* corresponde a todos os grupos de API.namespace, tipo string; um namespace.
kube-system* corresponde a todas as requisições de recursos.resource, tipo string; um tipo de recurso
pods, deployments* corresponde a todas as requisições de recursos.nonResourcePath, tipo string; caminhos de solicitação sem recurso.
/version ou /apis* corresponde a todas as requisições que não são de recursos./foo/* corresponde a todos os subcaminhos de /foo/.readonly, tipo booleano. Quando verdadeiro, significa que a política de correspondência de recursos se aplica apenas às operações get, list e watch. Em caso de políticas sem correspondência de recursos se aplica apenas à operação get.Uma propriedade não definida é igual a uma propriedade definida com o valor zero para seu tipo (por exemplo, string vazia, 0, falso). No entanto, indefinido deve ser preferido para legibilidade.
No futuro, as políticas poderão ser expressas no formato JSON e gerenciadas por meio de uma interface REST.
Uma requisição possui atributos que correspondem às propriedades de um objeto de política.
Quando uma requisição é recebida, os atributos são determinados. Atributos desconhecidos são definidos com o valor zero de seu tipo (por exemplo, string vazia, 0, falso).
Uma propriedade definida como "*" corresponderá a qualquer valor do atributo correspondente.
A tupla de atributos é verificada em relação a cada política do arquivo de política. Se pelo menos uma linha corresponder aos atributos da requisição, ela é então autorizada (mas pode falhar em validação posterior).
Para permitir que qualquer usuário autenticado faça algo, escreva uma política com a propriedade do grupo definida como "system:authenticated".
Para permitir que qualquer usuário não autenticado faça algo, escreva uma política com a propriedade do grupo definida como "system:unauthenticated".
Para permitir que um usuário faça qualquer coisa, escreva uma política com as propriedades apiGroup, namespace, resource e nonResourcePath definidas como "*".
O Kubectl usa os endpoints /api e /apis do servidor de API para descobrir os tipos de recursos servidos e valida objetos enviados para a API pelas operações criar/atualizar usando informações de esquema localizadas em /openapi/v2.
Ao utilizar a autorização ABAC, esses recursos especiais devem ser explicitamente expostos por meio da propriedade nonResourcePath em uma política (consulte exemplos abaixo):
/api, /api/*, /apis e /apis/* para negociação de versão da API./version para recuperar a versão do servidor via kubectl version./swaggerapi/* para operações de criação/atualização.Para inspecionar as chamadas HTTP envolvidas em uma operação kubectl específica, você pode aumentar a verbosidade:
kubectl --v=8 version
Alice pode fazer qualquer coisa em todos os recursos:
{"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "alice", "namespace": "*", "resource": "*", "apiGroup": "*"}}
O Kubelet pode ler qualquer Pod:
{"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "kubelet", "namespace": "*", "resource": "pods", "readonly": true}}
O Kubelet pode ler e escrever eventos:
{"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "kubelet", "namespace": "*", "resource": "events"}}
Bob pode ler Pods somente pertencentes ao namespace "projectCaribou":
{"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "bob", "namespace": "projectCaribou", "resource": "pods", "readonly": true}}
Qualquer pessoa pode realizar requisições somente-leitura em todos os caminhos que não são de recursos:
{"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"group": "system:authenticated", "readonly": true, "nonResourcePath": "*"}}
{"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"group": "system:unauthenticated", "readonly": true, "nonResourcePath": "*"}}
Cada conta de serviço tem um nome de usuário ABAC correspondente, e o nome de usuário dessa conta de serviço é gerado de acordo com a convenção de nomenclatura:
system:serviceaccount:<namespace>:<serviceaccountname>
A criação de um novo namespace leva à criação de uma nova conta de serviço no seguinte formato:
system:serviceaccount:<namespace>:default
Por exemplo, se você quiser conceder à conta de serviço padrão (no namespace kube-system) privilégio total à API usando ABAC, adicione esta linha ao seu arquivo de política:
{"apiVersion":"abac.authorization.kubernetes.io/v1beta1","kind":"Policy","spec":{"user":"system:serviceaccount:kube-system:default","namespace":"*","resource":"*","apiGroup":"*"}}
O servidor de API precisará ser reiniciado para carregar as novas linhas da política.
Kubernetes fornece um ferramenta de linha de comando para se comunicar com a camada de gerenciamento de um cluster Kubernetes usando a API do Kubernetes.
Esta ferramenta é chamada kubectl.
Para configuração, kubectl procura por um arquivo chamado config no diretório $HOME/.kube.
Você pode especificar outros arquivos kubeconfig
definindo a variável de ambiente KUBECONFIG ou configurando a
flag --kubeconfig.
Esta visão geral abrange a sintaxe do kubectl, descreve as operações de comando e fornece exemplos comuns.
Para detalhes sobre cada comando, incluindo todas as opções e subcomandos suportados, consulte a
documentação de referência do kubectl.
Para instruções de instalação, consulte Instalando kubectl;
para um guia rápido, consulte a folha de dicas.
Se você está acostumado a usar a ferramenta de linha de comando docker,
kubectl para Usuários Docker explica alguns comandos equivalentes para Kubernetes.
Use a seguinte sintaxe para executar comandos kubectl da janela do seu terminal:
kubectl [command] [TYPE] [NAME] [flags]
onde command, TYPE, NAME e flags são:
command: Especifica a operação que você deseja executar em um ou mais recursos,
por exemplo create, get, describe, delete.
TYPE: Especifica o tipo de recurso. Tipos de recursos não diferenciam maiúsculas de minúsculas e
você pode especificar as formas singular, plural ou abreviada.
Por exemplo, os seguintes comandos produzem a mesma saída:
kubectl get pod pod1
kubectl get pods pod1
kubectl get po pod1
NAME: Especifica o nome do recurso. Nomes diferenciam maiúsculas de minúsculas. Se o nome for omitido,
detalhes para todos os recursos são exibidos, por exemplo kubectl get pods.
Ao realizar uma operação em vários recursos, você pode especificar cada recurso por tipo e nome ou especificar um ou mais arquivos:
Para especificar recursos por tipo e nome:
Para agrupar recursos se todos forem do mesmo tipo: TYPE1 name1 name2 name<#>.
Exemplo: kubectl get pod example-pod1 example-pod2
Para especificar vários tipos de recursos individualmente: TYPE1/name1 TYPE1/name2 TYPE2/name3 TYPE<#>/name<#>.
Exemplo: kubectl get pod/example-pod1 replicationcontroller/example-rc1
Para especificar recursos com um ou mais arquivos: -f file1 -f file2 -f file<#>
kubectl get -f ./pod.yamlflags: Especifica flags opcionais. Por exemplo, você pode usar as flags -s ou --server
para especificar o endereço e porta do servidor de API do Kubernetes.
Se você precisar de ajuda, execute kubectl help da janela do terminal.
Por padrão, kubectl primeiro determinará se está sendo executado dentro de um pod, ou seja, em um cluster.
Ele começa verificando as variáveis de ambiente KUBERNETES_SERVICE_HOST e KUBERNETES_SERVICE_PORT
e a existência de um arquivo de token de conta de serviço em /var/run/secrets/kubernetes.io/serviceaccount/token.
Se todos os três forem encontrados, a autenticação dentro do cluster é assumida.
Para manter a retrocompatibilidade, se a variável de ambiente POD_NAMESPACE for definida
durante a autenticação dentro do cluster, ela sobrescreverá o namespace padrão do
token da conta de serviço. Quaisquer manifestos ou ferramentas que dependam do namespace padrão serão afetados por isso.
Variável de ambiente POD_NAMESPACE
Se a variável de ambiente POD_NAMESPACE for definida, operações de linha de comando em recursos com namespace
usarão por padrão o valor da variável. Por exemplo, se a variável for definida como seattle,
kubectl get pods retornaria pods no namespace seattle. Isso ocorre porque pods são
um recurso com namespace, e nenhum namespace foi fornecido no comando. Revise a saída
de kubectl api-resources para determinar se um recurso possui namespace.
O uso explícito de --namespace <value> sobrescreve este comportamento.
Como o kubectl lida com tokens de ServiceAccount
Se:
/var/run/secrets/kubernetes.io/serviceaccount/token, eKUBERNETES_SERVICE_HOST está definida, eKUBERNETES_SERVICE_PORT está definida, eentão o kubectl assume que está sendo executado no seu cluster. A ferramenta kubectl procura o namespace daquela ServiceAccount (que é o mesmo namespace do Pod) e atua com esse namespace. Isso é diferente do que acontece fora de um cluster; quando o kubectl é executado fora de um cluster e você não especifica um namespace, o comando kubectl atua com o namespace definido para o contexto atual na sua configuração do cliente. Para alterar o namespace padrão para seu kubectl você pode usar o seguinte comando:
kubectl config set-context --current --namespace=<namespace-name>
A seguinte tabela inclui descrições curtas e a sintaxe geral para todas as operações do kubectl:
| Operação | Sintaxe | Descrição |
|---|---|---|
alpha |
kubectl alpha SUBCOMMAND [flags] |
Lista os comandos disponíveis que correspondem às funcionalidades alfa, que não são habilitadas por padrão nos clusters Kubernetes. |
annotate |
kubectl annotate (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags] |
Adiciona ou atualiza as anotações de um ou mais recursos. |
api-resources |
kubectl api-resources [flags] |
Lista os recursos de API que estão disponíveis. |
api-versions |
kubectl api-versions [flags] |
Lista as versões de API que estão disponíveis. |
apply |
kubectl apply -f FILENAME [flags] |
Aplica uma alteração de configuração a um recurso de um arquivo ou stdin. |
attach |
kubectl attach POD -c CONTAINER [-i] [-t] [flags] |
Conecta a um contêiner em execução para visualizar o fluxo de saída ou interagir com o contêiner (stdin). |
auth |
kubectl auth [flags] [options] |
Inspeciona autorização. |
autoscale |
kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags] |
Escalona automaticamente o conjunto de pods que são gerenciados por um controlador de replicação. |
certificate |
kubectl certificate SUBCOMMAND [options] |
Modifica recursos de certificado. |
cluster-info |
kubectl cluster-info [flags] |
Exibe informações de endpoint sobre o nó principal e serviços no cluster. |
completion |
kubectl completion SHELL [options] |
Gera código de completar automaticamente para o shell especificado (bash ou zsh). |
config |
kubectl config SUBCOMMAND [flags] |
Modifica arquivos kubeconfig. Consulte os subcomandos individuais para detalhes. |
convert |
kubectl convert -f FILENAME [options] |
Converte arquivos de configuração entre diferentes versões de API. Ambos os formatos YAML e JSON são aceitos. Nota - requer que o plugin kubectl-convert esteja instalado. |
cordon |
kubectl cordon NODE [options] |
Marca o nó como não agendável. |
cp |
kubectl cp <file-spec-src> <file-spec-dest> [options] |
Copia arquivos e diretórios "de" e "para" contêineres. |
create |
kubectl create -f FILENAME [flags] |
Cria um ou mais recursos de um arquivo ou stdin. |
delete |
kubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | --all]) [flags] |
Exclui recursos de um arquivo, stdin, ou especificando seletores de rótulo, nomes, seletores de recursos, ou recursos. |
describe |
kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags] |
Exibe o estado detalhado de um ou mais recursos. |
diff |
kubectl diff -f FILENAME [flags] |
Compara arquivo ou stdin contra a configuração ativa. |
drain |
kubectl drain NODE [options] |
Drena o nó em preparação para manutenção. |
edit |
kubectl edit (-f FILENAME | TYPE NAME | TYPE/NAME) [flags] |
Edita e atualiza a definição de um ou mais recursos no servidor usando o editor padrão. |
events |
kubectl events |
Lista eventos |
exec |
kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [-- COMMAND [args...]] |
Executa um comando contra um contêiner em um pod. |
explain |
kubectl explain TYPE [--recursive=false] [flags] |
Obtém documentação de vários recursos. Por exemplo pods, nós, serviços, etc. |
expose |
kubectl expose (-f FILENAME | TYPE NAME | TYPE/NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type] [flags] |
Expõe um controlador de replicação, service, ou pod como um novo serviço Kubernetes. |
get |
kubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [--watch] [--sort-by=FIELD] [[-o | --output]=OUTPUT_FORMAT] [flags] |
Lista um ou mais recursos. |
kustomize |
kubectl kustomize <dir> [flags] [options] |
Lista um conjunto de recursos de API gerados a partir de instruções em um arquivo kustomization.yaml. O argumento deve ser o caminho para o diretório contendo o arquivo, ou uma URL de repositório git com um sufixo de caminho especificando o mesmo em relação à raiz do repositório. |
label |
kubectl label (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags] |
Adiciona ou atualiza os rótulos de um ou mais recursos. |
logs |
kubectl logs POD [-c CONTAINER] [--follow] [flags] |
Imprime os logs de um contêiner em um pod. |
options |
kubectl options |
Lista de opções globais de linha de comando, que se aplicam a todos os comandos. |
patch |
kubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) --patch PATCH [flags] |
Atualiza um ou mais campos de um recurso usando o processo de merge estratégico de patch. |
plugin |
kubectl plugin [flags] [options] |
Fornece utilitários para interagir com plugins. |
port-forward |
kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N] [flags] |
Encaminha uma ou mais portas locais para um pod. |
proxy |
kubectl proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix] [flags] |
Executa um proxy para o servidor de API do Kubernetes. |
replace |
kubectl replace -f FILENAME |
Substitui um recurso de um arquivo ou stdin. |
rollout |
kubectl rollout SUBCOMMAND [options] |
Gerencia o rollout de um recurso. Tipos de recursos válidos incluem: deployments, daemonsets e statefulsets. |
run |
kubectl run NAME --image=image [--env="key=value"] [--port=port] [--dry-run=server|client|none] [--overrides=inline-json] [flags] |
Executa uma imagem especificada no cluster. |
scale |
kubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) --replicas=COUNT [--resource-version=version] [--current-replicas=count] [flags] |
Atualiza o tamanho do controlador de replicação especificado. |
set |
kubectl set SUBCOMMAND [options] |
Configura recursos de aplicação. |
taint |
kubectl taint NODE NAME KEY_1=VAL_1:TAINT_EFFECT_1 ... KEY_N=VAL_N:TAINT_EFFECT_N [options] |
Atualiza os taints em um ou mais nós. |
top |
kubectl top (POD | NODE) [flags] [options] |
Exibe o uso de recursos (CPU/Memória/Armazenamento) de pod ou nó. |
uncordon |
kubectl uncordon NODE [options] |
Marca o nó como agendável. |
version |
kubectl version [--client] [flags] |
Exibe a versão do Kubernetes em execução no cliente e servidor. |
wait |
kubectl wait ([-f FILENAME] | resource.group/resource.name | resource.group [(-l label | --all)]) [--for=delete|--for condition=available] [options] |
Experimental: Aguarda uma condição específica em um ou muitos recursos. |
Para saber mais sobre operações de comando, consulte a documentação de referência do kubectl.
A seguinte tabela inclui uma lista de todos os tipos de recursos suportados e seus pseudônimos (aliases) abreviados.
(Esta saída pode ser obtida de kubectl api-resources, e estava precisa a partir do Kubernetes 1.25.0)
| NAME | SHORTNAMES | APIVERSION | NAMESPACED | KIND |
|---|---|---|---|---|
bindings |
v1 | true | Binding | |
componentstatuses |
cs |
v1 | false | ComponentStatus |
configmaps |
cm |
v1 | true | ConfigMap |
endpoints |
ep |
v1 | true | Endpoints |
events |
ev |
v1 | true | Event |
limitranges |
limits |
v1 | true | LimitRange |
namespaces |
ns |
v1 | false | Namespace |
nodes |
no |
v1 | false | Node |
persistentvolumeclaims |
pvc |
v1 | true | PersistentVolumeClaim |
persistentvolumes |
pv |
v1 | false | PersistentVolume |
pods |
po |
v1 | true | Pod |
podtemplates |
v1 | true | PodTemplate | |
replicationcontrollers |
rc |
v1 | true | ReplicationController |
resourcequotas |
quota |
v1 | true | ResourceQuota |
secrets |
v1 | true | Secret | |
serviceaccounts |
sa |
v1 | true | ServiceAccount |
services |
svc |
v1 | true | Service |
mutatingwebhookconfigurations |
admissionregistration.k8s.io/v1 | false | MutatingWebhookConfiguration | |
validatingwebhookconfigurations |
admissionregistration.k8s.io/v1 | false | ValidatingWebhookConfiguration | |
customresourcedefinitions |
crd,crds |
apiextensions.k8s.io/v1 | false | CustomResourceDefinition |
apiservices |
apiregistration.k8s.io/v1 | false | APIService | |
controllerrevisions |
apps/v1 | true | ControllerRevision | |
daemonsets |
ds |
apps/v1 | true | DaemonSet |
deployments |
deploy |
apps/v1 | true | Deployment |
replicasets |
rs |
apps/v1 | true | ReplicaSet |
statefulsets |
sts |
apps/v1 | true | StatefulSet |
tokenreviews |
authentication.k8s.io/v1 | false | TokenReview | |
localsubjectaccessreviews |
authorization.k8s.io/v1 | true | LocalSubjectAccessReview | |
selfsubjectaccessreviews |
authorization.k8s.io/v1 | false | SelfSubjectAccessReview | |
selfsubjectrulesreviews |
authorization.k8s.io/v1 | false | SelfSubjectRulesReview | |
subjectaccessreviews |
authorization.k8s.io/v1 | false | SubjectAccessReview | |
horizontalpodautoscalers |
hpa |
autoscaling/v2 | true | HorizontalPodAutoscaler |
cronjobs |
cj |
batch/v1 | true | CronJob |
jobs |
batch/v1 | true | Job | |
certificatesigningrequests |
csr |
certificates.k8s.io/v1 | false | CertificateSigningRequest |
leases |
coordination.k8s.io/v1 | true | Lease | |
endpointslices |
discovery.k8s.io/v1 | true | EndpointSlice | |
events |
ev |
events.k8s.io/v1 | true | Event |
flowschemas |
flowcontrol.apiserver.k8s.io/v1beta2 | false | FlowSchema | |
prioritylevelconfigurations |
flowcontrol.apiserver.k8s.io/v1beta2 | false | PriorityLevelConfiguration | |
ingressclasses |
networking.k8s.io/v1 | false | IngressClass | |
ingresses |
ing |
networking.k8s.io/v1 | true | Ingress |
networkpolicies |
netpol |
networking.k8s.io/v1 | true | NetworkPolicy |
runtimeclasses |
node.k8s.io/v1 | false | RuntimeClass | |
poddisruptionbudgets |
pdb |
policy/v1 | true | PodDisruptionBudget |
podsecuritypolicies |
psp |
policy/v1beta1 | false | PodSecurityPolicy |
clusterrolebindings |
rbac.authorization.k8s.io/v1 | false | ClusterRoleBinding | |
clusterroles |
rbac.authorization.k8s.io/v1 | false | ClusterRole | |
rolebindings |
rbac.authorization.k8s.io/v1 | true | RoleBinding | |
roles |
rbac.authorization.k8s.io/v1 | true | Role | |
priorityclasses |
pc |
scheduling.k8s.io/v1 | false | PriorityClass |
csidrivers |
storage.k8s.io/v1 | false | CSIDriver | |
csinodes |
storage.k8s.io/v1 | false | CSINode | |
csistoragecapacities |
storage.k8s.io/v1 | true | CSIStorageCapacity | |
storageclasses |
sc |
storage.k8s.io/v1 | false | StorageClass |
volumeattachments |
storage.k8s.io/v1 | false | VolumeAttachment |
Use as seguintes seções para informações sobre como você pode formatar ou classificar a saída de determinados comandos. Para detalhes sobre quais comandos suportam as várias opções de saída, consulte a documentação de referência do kubectl.
O formato de saída padrão para todos os comandos kubectl é o formato de texto simples legível por humanos.
Para exibir detalhes na janela do seu terminal em um formato específico, você pode adicionar as flags -o
ou --output a um comando kubectl suportado.
kubectl [command] [TYPE] [NAME] -o <output_format>
Dependendo da operação do kubectl, os seguintes formatos de saída são suportados:
| Formato de saída | Descrição |
|---|---|
-o custom-columns=<spec> |
Imprime uma tabela usando uma lista separada por vírgulas de colunas personalizadas. |
-o custom-columns-file=<filename> |
Imprime uma tabela usando o template de colunas personalizadas no arquivo <filename>. |
-o json |
Gera um objeto de API formatado em JSON. |
-o jsonpath=<template> |
Imprime os campos definidos em uma expressão jsonpath. |
-o jsonpath-file=<filename> |
Imprime os campos definidos pela expressão jsonpath no arquivo <filename>. |
-o kyaml |
Gera um objeto de API formatado em KYAML (alfa, requer variável de ambiente KUBECTL_KYAML="true"). |
-o name |
Imprime apenas o nome do recurso e nada mais. |
-o wide |
Saída no formato de texto simples com qualquer informação adicional. Para pods, o nome do nó é incluído. |
-o yaml |
Gera um objeto de API formatado em YAML. KYAML é um dialeto experimental específico do Kubernetes do YAML, e pode ser interpretado como YAML. |
Neste exemplo, o seguinte comando gera os detalhes para um único pod como um objeto formatado em YAML:
kubectl get pod web-pod-13je7 -o yaml
Lembre-se: Consulte a documentação de referência do kubectl para detalhes sobre qual formato de saída é suportado por cada comando.
Para definir colunas personalizadas e gerar apenas os detalhes que você deseja em uma tabela, você pode usar a opção custom-columns.
Você pode escolher definir as colunas personalizadas inline ou usar um arquivo de template: -o custom-columns=<spec> ou -o custom-columns-file=<filename>.
Inline:
kubectl get pods <pod-name> -o custom-columns=NAME:.metadata.name,RSRC:.metadata.resourceVersion
Arquivo de template:
kubectl get pods <pod-name> -o custom-columns-file=template.txt
onde o arquivo template.txt contém:
NAME RSRC
metadata.name metadata.resourceVersion
O resultado da execução de qualquer comando é similar a:
NAME RSRC
submit-queue 610995
kubectl suporta receber informações específicas de colunas do servidor sobre objetos.
Isso significa que para qualquer recurso dado, o servidor retornará colunas e linhas relevantes para esse recurso, para o cliente imprimir.
Isso permite uma saída legível por humanos consistente entre clientes usados contra o mesmo cluster, fazendo com que o servidor encapsule os detalhes da impressão.
Esta funcionalidade está habilitada por padrão. Para desabilitá-la, adicione a
flag --server-print=false ao comando kubectl get.
Para imprimir informações sobre o status de um pod, use um comando como o seguinte:
kubectl get pods <pod-name> --server-print=false
A saída é similar a:
NAME AGE
pod-name 1m
Para gerar objetos em uma lista classificada na janela do seu terminal, você pode adicionar a flag --sort-by
a um comando kubectl suportado. Classifique seus objetos especificando qualquer campo numérico ou string
com a flag --sort-by. Para especificar um campo, use uma expressão jsonpath.
kubectl [command] [TYPE] [NAME] --sort-by=<jsonpath_exp>
Para imprimir uma lista de pods classificados por nome, você executa:
kubectl get pods --sort-by=.metadata.name
Use o seguinte conjunto de exemplos para ajudar você a se familiarizar com a execução das operações kubectl comumente usadas:
kubectl apply - Aplica ou atualiza um recurso de um arquivo ou stdin.
# Cria um serviço usando a definição em example-service.yaml.
kubectl apply -f example-service.yaml
# Cria um controlador de replicação usando a definição em example-controller.yaml.
kubectl apply -f example-controller.yaml
# Cria os objetos que são definidos em qualquer arquivo .yaml, .yml ou .json dentro do diretório <directory>.
kubectl apply -f <directory>
kubectl get - Lista um ou mais recursos.
# Lista todos os pods em formato de saída de texto simples.
kubectl get pods
# Lista todos os pods em formato de saída de texto simples e inclui informações adicionais (como nome do nó).
kubectl get pods -o wide
# Lista o controlador de replicação com o nome especificado em formato de saída de texto simples. Dica: Você pode encurtar e substituir o tipo de recurso 'replicationcontroller' com o alias 'rc'.
kubectl get replicationcontroller <rc-name>
# Lista todos os controladores de replicação e services juntos em formato de saída de texto simples.
kubectl get rc,services
# Lista todos os daemon sets em formato de saída de texto simples.
kubectl get ds
# Lista todos os pods executando no nó server01
kubectl get pods --field-selector=spec.nodeName=server01
kubectl describe - Exibe o estado detalhado de um ou mais recursos, incluindo os não inicializados por padrão.
# Exibe os detalhes do nó com nome <node-name>.
kubectl describe nodes <node-name>
# Exibe os detalhes do pod com nome <pod-name>.
kubectl describe pods/<pod-name>
# Exibe os detalhes de todos os pods que são gerenciados pelo controlador de replicação chamado <rc-name>.
# Lembre-se: Qualquer pod que seja criado pelo controlador de replicação recebe um prefixo com o nome do controlador de replicação.
kubectl describe pods <rc-name>
# Descreve todos os pods
kubectl describe pods
kubectl get é geralmente usado para recuperar um ou mais
recursos do mesmo tipo de recurso. Ele possui um rico conjunto de flags que permite
personalizar o formato de saída usando a flag -o ou --output, por exemplo.
Você pode especificar a flag -w ou --watch para começar a observar atualizações para um
objeto específico. O comando kubectl describe é mais focado em descrever os muitos
aspectos relacionados de um recurso especificado. Ele pode realizar várias chamadas de API
para o servidor de API para construir uma visualização para o usuário. Por exemplo, o comando kubectl describe node
recupera não apenas as informações sobre o nó, mas também um resumo dos
pods executando nele, os eventos gerados para o nó, etc.kubectl delete - Exclui recursos de um arquivo, stdin, ou especificando seletores de rótulo, nomes, seletores de recursos, ou recursos.
# Exclui um pod usando o tipo e nome especificados no arquivo pod.yaml.
kubectl delete -f pod.yaml
# Exclui todos os pods e services que têm o rótulo '<label-key>=<label-value>'.
kubectl delete pods,services -l <label-key>=<label-value>
# Exclui todos os pods, incluindo os não inicializados.
kubectl delete pods --all
kubectl exec - Executa um comando contra um contêiner em um pod.
# Obtém saída da execução de 'date' do pod <pod-name>. Por padrão, a saída é do primeiro contêiner.
kubectl exec <pod-name> -- date
# Obtém saída da execução de 'date' no contêiner <container-name> do pod <pod-name>.
kubectl exec <pod-name> -c <container-name> -- date
# Obtém um TTY interativo e executa /bin/bash do pod <pod-name>. Por padrão, a saída é do primeiro contêiner.
kubectl exec -ti <pod-name> -- /bin/bash
kubectl logs - Imprime os logs de um contêiner em um pod.
# Retorna um snapshot dos logs do pod <pod-name>.
kubectl logs <pod-name>
# Inicia o streaming dos logs do pod <pod-name>. Isso é similar ao comando Linux 'tail -f'.
kubectl logs -f <pod-name>
kubectl diff - Visualiza um diff das atualizações propostas para um cluster.
# Compara recursos incluídos em "pod.json".
kubectl diff -f pod.json
# Compara arquivo lido do stdin.
cat service.yaml | kubectl diff -f -
Use o seguinte conjunto de exemplos para ajudar você a se familiarizar com a escrita e uso de plugins do kubectl:
# cria um plugin simples em qualquer linguagem e nomeia o arquivo executável resultante
# para que comece com o prefixo "kubectl-"
cat ./kubectl-hello
#!/bin/sh
# este plugin imprime as palavras "hello world"
echo "hello world"
Com um plugin escrito, vamos torná-lo executável:
chmod a+x ./kubectl-hello
# e movê-lo para um local no nosso PATH
sudo mv ./kubectl-hello /usr/local/bin
sudo chown root:root /usr/local/bin
# Você agora criou e "instalou" um plugin kubectl.
# Você pode começar a usar este plugin invocando-o do kubectl como se fosse um comando regular
kubectl hello
hello world
# Você pode "desinstalar" um plugin, removendo-o da pasta no seu
# $PATH onde você o colocou
sudo rm /usr/local/bin/kubectl-hello
Para visualizar todos os plugins que estão disponíveis para kubectl, use
o subcomando kubectl plugin list:
kubectl plugin list
A saída é similar a:
The following kubectl-compatible plugins are available:
/usr/local/bin/kubectl-hello
/usr/local/bin/kubectl-foo
/usr/local/bin/kubectl-bar
kubectl plugin list também avisa sobre plugins que não são
executáveis, ou que são sombreados por outros plugins; por exemplo:
sudo chmod -x /usr/local/bin/kubectl-foo # remove permissão de execução
kubectl plugin list
The following kubectl-compatible plugins are available:
/usr/local/bin/kubectl-hello
/usr/local/bin/kubectl-foo
- warning: /usr/local/bin/kubectl-foo identified as a plugin, but it is not executable
/usr/local/bin/kubectl-bar
error: one plugin warning was found
Você pode pensar em plugins como um meio de construir funcionalidades mais complexas sobre os comandos kubectl existentes:
cat ./kubectl-whoami
Os próximos exemplos assumem que você já fez kubectl-whoami ter
o seguinte conteúdo:
#!/bin/bash
# este plugin faz uso do comando `kubectl config` para gerar
# informações sobre o usuário atual, baseado no contexto atualmente selecionado
kubectl config view --template='{{ range .contexts }}{{ if eq .name "'$(kubectl config current-context)'" }}Current user: {{ printf "%s\n" .context.user }}{{ end }}{{ end }}'
Executar o comando acima fornece uma saída contendo o usuário para o contexto atual no seu arquivo KUBECONFIG:
# torna o arquivo executável
sudo chmod +x ./kubectl-whoami
# e o move para o seu PATH
sudo mv ./kubectl-whoami /usr/local/bin
kubectl whoami
Current user: plugins-user
kubectl:
kubectlEsta página contém uma lista de comandos e flags do kubectl comumente utilizados.
kubectl version.source <(kubectl completion bash) # configura o autocompletar no bash para o shell atual, o pacote bash-completion deve ser instalado primeiro.
echo "source <(kubectl completion bash)" >> ~/.bashrc # adiciona o autocompletar permanentemente ao seu shell bash.
Você também pode usar um alias abreviado para kubectl que também funciona com o completion:
alias k=kubectl
complete -o default -F __start_kubectl k
source <(kubectl completion zsh) # configura o autocompletar no zsh para o shell atual
echo '[[ $commands[kubectl] ]] && source <(kubectl completion zsh)' >> ~/.zshrc # adiciona o autocompletar permanentemente ao seu shell zsh
echo 'kubectl completion fish | source' > ~/.config/fish/completions/kubectl.fish && source ~/.config/fish/completions/kubectl.fish
--all-namespacesAdicionar --all-namespaces acontece com frequência suficiente para que você deva estar ciente da abreviação para --all-namespaces:
kubectl -A
Define com qual cluster Kubernetes o kubectl se comunica e modifica as informações de configuração.
Consulte a documentação Autenticando entre Clusters com kubeconfig
para informações detalhadas sobre o arquivo de configuração.
kubectl config view # Mostra as configurações mescladas do kubeconfig.
# usa múltiplos arquivos kubeconfig ao mesmo tempo e visualiza a configuração mesclada
KUBECONFIG=~/.kube/config:~/.kube/kubconfig2
kubectl config view
# Mostra as configurações mescladas do kubeconfig e dados brutos de certificado e segredos expostos
kubectl config view --raw
# obtém a senha para o usuário e2e
kubectl config view -o jsonpath='{.users[?(@.name == "e2e")].user.password}'
# obtém o certificado para o usuário e2e
kubectl config view --raw -o jsonpath='{.users[?(.name == "e2e")].user.client-certificate-data}' | base64 -d
kubectl config view -o jsonpath='{.users[].name}' # exibe o primeiro usuário
kubectl config view -o jsonpath='{.users[*].name}' # obtém uma lista de usuários
kubectl config get-contexts # exibe a lista de contextos
kubectl config get-contexts -o name # obtém todos os nomes de contexto
kubectl config current-context # exibe o contexto atual
kubectl config use-context my-cluster-name # define o contexto padrão como my-cluster-name
kubectl config set-cluster my-cluster-name # define uma entrada de cluster no kubeconfig
# configura a URL para um servidor proxy a ser usado para requisições feitas por este cliente no kubeconfig
kubectl config set-cluster my-cluster-name --proxy-url=my-proxy-url
# adiciona um novo usuário ao seu kubeconf que suporta autenticação básica
kubectl config set-credentials kubeuser/foo.kubernetes.com --username=kubeuser --password=kubepassword
# salva permanentemente o namespace para todos os comandos kubectl subsequentes naquele contexto.
kubectl config set-context --current --namespace=ggckad-s2
# define um contexto utilizando um nome de usuário e namespace específicos.
kubectl config set-context gce --user=cluster-admin --namespace=foo \
&& kubectl config use-context gce
kubectl config unset users.foo # exclui o usuário foo
# alias abreviado para definir/mostrar contexto/namespace (funciona apenas para bash e shells compatíveis com bash, o contexto atual deve ser definido antes de usar kn para definir o namespace)
alias kx='f() { [ "$1" ] && kubectl config use-context $1 || kubectl config current-context ; } ; f'
alias kn='f() { [ "$1" ] && kubectl config set-context --current --namespace $1 || kubectl config view --minify | grep namespace | cut -d" " -f6 ; } ; f'
O apply gerencia aplicações por meio de arquivos que definem recursos do Kubernetes.
Ele cria e atualiza recursos em um cluster executando kubectl apply. Esta é a forma
recomendada de gerenciar aplicações Kubernetes em produção. Consulte Kubectl Book.
Os manifestos do Kubernetes podem ser definidos em YAML ou JSON.
As extensões de arquivo .yaml, .yml e .json podem ser utilizadas.
kubectl apply -f ./my-manifest.yaml # cria recurso(s)
kubectl apply -f ./my1.yaml -f ./my2.yaml # cria a partir de múltiplos arquivos
kubectl apply -f ./dir # cria recurso(s) em todos os arquivos de manifesto no diretório
kubectl apply -f https://example.com/manifest.yaml # cria recurso(s) a partir de url (Nota: este é um domínio de exemplo e não contém um manifesto válido)
kubectl create deployment nginx --image=nginx # inicia uma única instância do nginx
# cria um Job que imprime "Hello World"
kubectl create job hello --image=busybox:1.28 -- echo "Hello World"
# cria uma CronJob que imprime "Hello World" a cada minuto
kubectl create cronjob hello --image=busybox:1.28 --schedule="*/1 * * * *" -- echo "Hello World"
kubectl explain pods # obtém a documentação para manifestos de pod
# Cria múltiplos objetos YAML a partir do stdin
kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
name: busybox-sleep
spec:
containers:
- name: busybox
image: busybox:1.28
args:
- sleep
- "1000000"
---
apiVersion: v1
kind: Pod
metadata:
name: busybox-sleep-less
spec:
containers:
- name: busybox
image: busybox:1.28
args:
- sleep
- "1000"
EOF
# Cria um secret com várias chaves
kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
password: $(echo -n "s33msi4" | base64 -w0)
username: $(echo -n "jane" | base64 -w0)
EOF
# Comandos get com saída básica
kubectl get services # Lista todos os services no namespace
kubectl get pods --all-namespaces # Lista todos os pods em todos os namespaces
kubectl get pods -o wide # Lista todos os pods no namespace atual, com mais detalhes
kubectl get deployment my-dep # Lista um deployment específico
kubectl get pods # Lista todos os pods no namespace
kubectl get pod my-pod -o yaml # Obtém o YAML de um pod
# Comandos describe com saída detalhada
kubectl describe nodes my-node
kubectl describe pods my-pod
# Lista Services ordenados por nome
kubectl get services --sort-by=.metadata.name
# Lista pods ordenados por contagem de reinicializações
kubectl get pods --sort-by='.status.containerStatuses[0].restartCount'
# Lista PersistentVolumes ordenados por capacidade
kubectl get pv --sort-by=.spec.capacity.storage
# Obtém o rótulo da versão de todos os pods com rótulo app=cassandra
kubectl get pods --selector=app=cassandra -o \
jsonpath='{.items[*].metadata.labels.version}'
# Recupera o valor de uma chave com pontos, ex.: 'ca.crt'
kubectl get configmap myconfig \
-o jsonpath='{.data.ca\.crt}'
# Recupera um valor codificado em base64 com hífens em vez de sublinhados (underscores).
kubectl get secret my-secret --template='{{index .data "key-name-with-dashes"}}'
# Obtém todos os nós de processamento (usa um seletor para excluir resultados que têm um rótulo
# chamado 'node-role.kubernetes.io/control-plane')
kubectl get node --selector='!node-role.kubernetes.io/control-plane'
# Obtém todos os pods em execução no namespace
kubectl get pods --field-selector=status.phase=Running
# Obtém ExternalIPs de todos os nós
kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'
# Lista nomes de Pods que pertencem a um RC específico
# O comando "jq" é útil para transformações complexas demais para jsonpath, pode ser encontrado em https://jqlang.github.io/jq/
sel=${$(kubectl get rc my-rc --output=json | jq -j '.spec.selector | to_entries | .[] | "\(.key)=\(.value),"')%?}
echo $(kubectl get pods --selector=$sel --output=jsonpath={.items..metadata.name})
# Mostra rótulos para todos os pods (ou qualquer outro objeto Kubernetes que suporte rotulagem)
kubectl get pods --show-labels
# Verifica quais nós estão prontos
JSONPATH='{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}' \
&& kubectl get nodes -o jsonpath="$JSONPATH" | grep "Ready=True"
# Verifica quais nós estão prontos com custom-columns
kubectl get node -o custom-columns='NODE_NAME:.metadata.name,STATUS:.status.conditions[?(@.type=="Ready")].status'
# Saída de secrets decodificados sem ferramentas externas
kubectl get secret my-secret -o go-template='{{range $k,$v := .data}}{{"### "}}{{$k}}{{"\n"}}{{$v|base64decode}}{{"\n\n"}}{{end}}'
# Lista todos os Secrets atualmente em uso por um pod
kubectl get pods -o json | jq '.items[].spec.containers[].env[]?.valueFrom.secretKeyRef.name' | grep -v null | sort | uniq
# Lista todos os containerIDs de initContainer de todos os pods
# Útil ao limpar contêineres parados, evitando a remoção de initContainers.
kubectl get pods --all-namespaces -o jsonpath='{range .items[*].status.initContainerStatuses[*]}{.containerID}{"\n"}{end}' | cut -d/ -f3
# Lista eventos ordenados por timestamp
kubectl get events --sort-by=.metadata.creationTimestamp
# Lista todos os eventos de aviso
kubectl events --types=Warning
# Compara o estado atual do cluster com o estado em que o cluster estaria se o manifesto fosse aplicado.
kubectl diff -f ./my-manifest.yaml
# Produz uma árvore delimitada por pontos de todas as chaves retornadas para nós
# Útil ao localizar uma chave dentro de uma estrutura JSON aninhada complexa
kubectl get nodes -o json | jq -c 'paths|join(".")'
# Produz uma árvore delimitada por pontos de todas as chaves retornadas para pods, etc
kubectl get pods -o json | jq -c 'paths|join(".")'
# Produz ENV para todos os pods, assumindo que você tem um contêiner padrão para os pods, namespace padrão e o comando `env` é suportado.
# Útil ao executar qualquer comando suportado em todos os pods, não apenas `env`
for pod in $(kubectl get po --output=jsonpath={.items..metadata.name}); do echo $pod && kubectl exec -it $pod -- env; done
# Obtém o subrecurso status de um deployment
kubectl get deployment nginx-deployment --subresource=status
kubectl set image deployment/frontend www=image:v2 # Atualização gradual dos contêineres "www" do deployment "frontend", atualizando a imagem
kubectl rollout history deployment/frontend # Verifica o histórico de deployments incluindo a revisão
kubectl rollout undo deployment/frontend # Reverte para o deployment anterior
kubectl rollout undo deployment/frontend --to-revision=2 # Reverte para uma revisão específica
kubectl rollout status -w deployment/frontend # Observa o status da atualização gradual do deployment "frontend" até a conclusão
kubectl rollout restart deployment/frontend # Reinicialização gradual do deployment "frontend"
cat pod.json | kubectl replace -f - # Substitui um pod baseado no JSON passado para o stdin
# Substitui forçadamente, exclui e então recria o recurso. Causará uma interrupção do serviço.
kubectl replace --force -f ./pod.json
# Cria um Service para um nginx replicado, que serve na porta 80 e conecta aos contêineres na porta 8000
kubectl expose rc nginx --port=80 --target-port=8000
# Atualiza a versão da imagem (tag) de um pod de contêiner único para v4
kubectl get pod mypod -o yaml | sed 's/\(image: myimage\):.*$/\1:v4/' | kubectl replace -f -
kubectl label pods my-pod new-label=awesome # Adiciona um rótulo
kubectl label pods my-pod new-label- # Remove um rótulo
kubectl label pods my-pod new-label=new-value --overwrite # Sobrescreve um valor existente
kubectl annotate pods my-pod icon-url=http://goo.gl/XXBTWq # Adiciona uma anotação
kubectl annotate pods my-pod icon-url- # Remove anotação
kubectl autoscale deployment foo --min=2 --max=10 # Escalonamento automático de um deployment "foo"
# Atualiza parcialmente um nó
kubectl patch node k8s-node-1 -p '{"spec":{"unschedulable":true}}'
# Atualiza a imagem de um contêiner; spec.containers[*].name é obrigatório porque é uma chave de mesclagem
kubectl patch pod valid-pod -p '{"spec":{"containers":[{"name":"kubernetes-serve-hostname","image":"new image"}]}}'
# Atualiza a imagem de um contêiner usando um json patch com arrays posicionais
kubectl patch pod valid-pod --type='json' -p='[{"op": "replace", "path": "/spec/containers/0/image", "value":"new image"}]'
# Desabilita uma verificação de operacionalidade de deployment usando um json patch com arrays posicionais
kubectl patch deployment valid-deployment --type json -p='[{"op": "remove", "path": "/spec/template/spec/containers/0/livenessProbe"}]'
# Adiciona um novo elemento a um array posicional
kubectl patch sa default --type='json' -p='[{"op": "add", "path": "/secrets/1", "value": {"name": "whatever" } }]'
# Atualiza a contagem de réplicas de um deployment aplicando patch em seu subrecurso de escalonamento
kubectl patch deployment nginx-deployment --subresource='scale' --type='merge' -p '{"spec":{"replicas":2}}'
Edita qualquer recurso da API no seu editor preferido.
kubectl edit svc/docker-registry # Edita o Service chamado docker-registry
KUBE_EDITOR="nano" kubectl edit svc/docker-registry # Usa um editor alternativo
kubectl scale --replicas=3 rs/foo # Escalona um replicaset chamado 'foo' para 3
kubectl scale --replicas=3 -f foo.yaml # Escalona um recurso especificado em "foo.yaml" para 3
kubectl scale --current-replicas=2 --replicas=3 deployment/mysql # Se o tamanho atual do deployment chamado mysql for 2, escalona mysql para 3
kubectl scale --replicas=5 rc/foo rc/bar rc/baz # Escalona múltiplos controladores de replicação
kubectl delete -f ./pod.json # Exclui um pod usando o tipo e nome especificados no pod.json
kubectl delete pod unwanted --now # Exclui um pod sem período de tolerância
kubectl delete pod,service baz foo # Exclui pods e services com os mesmos nomes "baz" e "foo"
kubectl delete pods,services -l name=myLabel # Exclui pods e services com o rótulo name=myLabel
kubectl -n my-ns delete pod,svc --all # Exclui todos os pods e services no namespace my-ns,
# Exclui todos os pods que correspondem ao padrão awk pattern1 ou pattern2
kubectl get pods -n mynamespace --no-headers=true | awk '/pattern1|pattern2/{print $1}' | xargs kubectl delete -n mynamespace pod
kubectl logs my-pod # despeja logs do pod (stdout)
kubectl logs -l name=myLabel # despeja logs do pod, com rótulo name=myLabel (stdout)
kubectl logs my-pod --previous # despeja logs do pod (stdout) para uma instanciação anterior de um contêiner
kubectl logs my-pod -c my-container # despeja logs do contêiner do pod (stdout, caso multi-contêiner)
kubectl logs -l name=myLabel -c my-container # despeja logs do contêiner do pod, com rótulo name=myLabel (stdout)
kubectl logs my-pod -c my-container --previous # despeja logs do contêiner do pod (stdout, caso multi-contêiner) para uma instanciação anterior de um contêiner
kubectl logs -f my-pod # transmite logs do pod (stdout)
kubectl logs -f my-pod -c my-container # transmite logs do contêiner do pod (stdout, caso multi-contêiner)
kubectl logs -f -l name=myLabel --all-containers # transmite todos os logs dos pods com rótulo name=myLabel (stdout)
kubectl run -i --tty busybox --image=busybox:1.28 -- sh # Executa pod como shell interativo
kubectl run nginx --image=nginx -n mynamespace # Inicia uma única instância do pod nginx no namespace mynamespace
kubectl run nginx --image=nginx --dry-run=client -o yaml > pod.yaml
# Gera especificação para executar o pod nginx e escreve em um arquivo chamado pod.yaml
kubectl attach my-pod -i # Anexa ao contêiner em execução
kubectl port-forward my-pod 5000:6000 # Escuta na porta 5000 da máquina local e encaminha para a porta 6000 no my-pod
kubectl exec my-pod -- ls / # Executa comando em pod existente (caso de 1 contêiner)
kubectl exec --stdin --tty my-pod -- /bin/sh # Acesso de shell interativo a um pod em execução (caso de 1 contêiner)
kubectl exec my-pod -c my-container -- ls / # Executa comando em pod existente (caso multi-contêiner)
kubectl debug my-pod -it --image=busybox:1.28 # Cria uma sessão de depuração interativa dentro do pod existente e anexa imediatamente a ela
kubectl debug node/my-node -it --image=busybox:1.28 # Cria uma sessão de depuração interativa em um nó e anexa imediatamente a ela
kubectl top pod # Mostra métricas para todos os pods no namespace padrão
kubectl top pod POD_NAME --containers # Mostra métricas para um determinado pod e seus contêineres
kubectl top pod POD_NAME --sort-by=cpu # Mostra métricas para um determinado pod e ordena por 'cpu' ou 'memory'
kubectl cp /tmp/foo_dir my-pod:/tmp/bar_dir # Copia o diretório local /tmp/foo_dir para /tmp/bar_dir em um pod remoto no namespace atual
kubectl cp /tmp/foo my-pod:/tmp/bar -c my-container # Copia o arquivo local /tmp/foo para /tmp/bar em um pod remoto em um contêiner específico
kubectl cp /tmp/foo my-namespace/my-pod:/tmp/bar # Copia o arquivo local /tmp/foo para /tmp/bar em um pod remoto no namespace my-namespace
kubectl cp my-namespace/my-pod:/tmp/foo /tmp/bar # Copia /tmp/foo de um pod remoto para /tmp/bar localmente
kubectl cp requer que o binário 'tar' esteja presente na sua imagem do contêiner. Se o 'tar' não estiver presente, o kubectl cp falhará.
Para casos de uso avançados, como links simbólicos, expansão de caracteres curinga ou preservação do modo de arquivo, considere usar o kubectl exec.tar cf - /tmp/foo | kubectl exec -i -n my-namespace my-pod -- tar xf - -C /tmp/bar # Copia o arquivo local /tmp/foo para /tmp/bar em um pod remoto no namespace my-namespace
kubectl exec -n my-namespace my-pod -- tar cf - /tmp/foo | tar xf - -C /tmp/bar # Copia /tmp/foo de um pod remoto para /tmp/bar localmente
kubectl logs deploy/my-deployment # despeja logs do Pod para um Deployment (caso de contêiner único)
kubectl logs deploy/my-deployment -c my-container # despeja logs do Pod para um Deployment (caso multi-contêiner)
kubectl port-forward svc/my-service 5000 # escuta na porta local 5000 e encaminha para a porta 5000 no backend do Service
kubectl port-forward svc/my-service 5000:my-service-port # escuta na porta local 5000 e encaminha para a porta de destino do Service com nome <my-service-port>
kubectl port-forward deploy/my-deployment 5000:6000 # escuta na porta local 5000 e encaminha para a porta 6000 em um Pod criado por <my-deployment>
kubectl exec deploy/my-deployment -- ls # executa comando no primeiro Pod e primeiro contêiner no Deployment (casos de contêiner único ou multi-contêiner)
kubectl cordon my-node # Marca my-node como não alocável
kubectl drain my-node # Drena my-node em preparação para manutenção
kubectl uncordon my-node # Marca my-node como alocável
kubectl top node # Mostra métricas para todos os nós
kubectl top node my-node # Mostra métricas para um determinado nó
kubectl cluster-info # Exibe endereços do master e services
kubectl cluster-info dump # Despeja o estado atual do cluster para stdout
kubectl cluster-info dump --output-directory=/path/to/cluster-state # Despeja o estado atual do cluster para /path/to/cluster-state
# Visualiza taints existentes que existem nos nós atuais.
kubectl get nodes -o='custom-columns=NodeName:.metadata.name,TaintKey:.spec.taints[*].key,TaintValue:.spec.taints[*].value,TaintEffect:.spec.taints[*].effect'
# Se um taint com essa chave e efeito já existir, seu valor é substituído conforme especificado.
kubectl taint nodes foo dedicated=special-user:NoSchedule
Lista todos os tipos de recurso suportados junto com seus nomes abreviados, grupo de API, se eles são namespaced, e kind:
kubectl api-resources
Outras operações para explorar recursos da API:
kubectl api-resources --namespaced=true # Todos os recursos namespaced
kubectl api-resources --namespaced=false # Todos os recursos não namespaced
kubectl api-resources -o name # Todos os recursos com saída simples (apenas o nome do recurso)
kubectl api-resources -o wide # Todos os recursos com saída expandida (também conhecida como "wide")
kubectl api-resources --verbs=list,get # Todos os recursos que suportam os verbos de requisição "list" e "get"
kubectl api-resources --api-group=extensions # Todos os recursos no grupo de API "extensions"
Para exibir detalhes na janela do seu terminal em um formato específico,
adicione a flag -o (ou --output) a um comando kubectl compatível.
| Formato de saída | Descrição |
|---|---|
-o=custom-columns=<spec> |
Imprime uma tabela usando uma lista separada por vírgulas de colunas personalizadas |
-o=custom-columns-file=<filename> |
Imprime uma tabela usando o modelo de colunas personalizadas no arquivo <filename> |
-o=go-template=<template> |
Imprime os campos definidos em um template golang |
-o=go-template-file=<filename> |
Imprime os campos definidos pelo template golang no arquivo <filename> |
-o=json |
Exibe um objeto de API formatado em JSON |
-o=jsonpath=<template> |
Imprime os campos definidos em uma expressão jsonpath |
-o=jsonpath-file=<filename> |
Imprime os campos definidos pela expressão jsonpath no arquivo <filename> |
-o=kyaml |
Exibe um objeto de API formatado em KYAML (alfa, requer a variável de ambiente KUBECTL_KYAML="true"). KYAML é um dialeto experimental específico do Kubernetes em YAML, e pode ser interpretado como YAML. |
-o=name |
Imprime apenas o nome do recurso e nada mais |
-o=wide |
Exibe no formato de texto simples com qualquer informação adicional, e para pods, o nome do nó é incluído |
-o=yaml |
Exibe um objeto de API formatado em YAML |
Exemplos usando -o=custom-columns:
# Todas as imagens executando em um cluster
kubectl get pods -A -o=custom-columns='DATA:spec.containers[*].image'
# Todas as imagens executando no namespace: default, agrupadas por Pod
kubectl get pods --namespace default --output=custom-columns="NAME:.metadata.name,IMAGE:.spec.containers[*].image"
# Todas as imagens excluindo "registry.k8s.io/coredns:1.6.2"
kubectl get pods -A -o=custom-columns='DATA:spec.containers[?(@.image!="registry.k8s.io/coredns:1.6.2")].image'
# Todos os campos sob metadata independentemente do nome
kubectl get pods -A -o=custom-columns='DATA:metadata.*'
Mais exemplos na documentação de referência do kubectl.
A verbosidade do kubectl é controlada com as flags -v ou --v seguidas por um inteiro
representando o nível de log. As convenções gerais de logging do Kubernetes e os níveis
de log associados são descritos aqui.
| Verbosidade | Descrição |
|---|---|
--v=0 |
Geralmente útil para que isso seja sempre visível para um operador de cluster. |
--v=1 |
Um nível de log padrão razoável se você não quiser verbosidade. |
--v=2 |
Informações úteis de estado estável sobre o service e mensagens de log importantes que podem se correlacionar com mudanças significativas no sistema. Este é o nível de log padrão recomendado para a maioria dos sistemas. |
--v=3 |
Informações estendidas sobre mudanças. |
--v=4 |
Verbosidade de nível de depuração. |
--v=5 |
Verbosidade de nível de rastreamento. |
--v=6 |
Exibe recursos requisitados. |
--v=7 |
Exibe cabeçalhos de requisição HTTP. |
--v=8 |
Exibe conteúdos de requisição HTTP. |
--v=9 |
Exibe conteúdos de requisição HTTP sem truncamento de conteúdos. |
Leia a visão geral do kubectl e aprenda sobre JsonPath.
Consulte as opções do kubectl.
Consulte as opções do kuberc.
Leia também as Convenções de Uso do kubectl para entender como usar o kubectl em scripts reutilizáveis.
Veja mais folhas de dicas do kubectl da comunidade.
Esta página contém uma lista de comandos kubectl e flags frequentemente usados.
source <(kubectl completion bash) # configuração de autocomplete no bash do shell atual, o pacote bash-completion precisa ter sido instalado primeiro.
echo "source <(kubectl completion bash)" >> ~/.bashrc # para adicionar o autocomplete permanentemente no seu shell bash.
Você também pode usar uma abreviação para o atalho para kubectl que também funciona com o auto completar:
alias k=kubectl
complete -o default -F __start_kubectl k
source <(kubectl completion zsh) # configuração para usar autocomplete no terminal zsh no shell atual
echo '[[ $commands[kubectl] ]] && source <(kubectl completion zsh)' >> ~/.zshrc # adicionar auto completar permanentemente para o seu shell zsh
--all-namespacesAcrescentar --all-namespaces acontece com bastante frequência, onde você deve estar ciente da abreviação de --all-namespaces:
kubectl -A
Define com qual cluster Kubernetes o kubectl se comunica e modifica os detalhes da configuração.
Veja a documentação Autenticando entre clusters com o kubeconfig para
informações detalhadas do arquivo de configuração.
kubectl config view # Mostra configurações do kubeconfig mergeadas
# use vários arquivos kubeconfig ao mesmo tempo e visualize a configuração mergeada
KUBECONFIG=~/.kube/config:~/.kube/kubconfig2
kubectl config view
# obtenha a senha para o usuário e2e
kubectl config view -o jsonpath='{.users[?(@.name == "e2e")].user.password}'
kubectl config view -o jsonpath='{.users[].name}' # exibe o primeiro usuário
kubectl config view -o jsonpath='{.users[*].name}' # obtém uma lista de usuários
kubectl config get-contexts # exibe lista de contextos
kubectl config current-context # exibe o contexto atual
kubectl config use-context my-cluster-name # define o contexto padrão como my-cluster-name
kubectl config set-cluster my-cluster-name # define uma entrada de cluster no kubeconfig
# configura a URL para um servidor proxy a ser usado para solicitações feitas por este cliente no kubeconfig
kubectl config set-cluster my-cluster-name --proxy-url=my-proxy-url
# adiciona um novo cluster ao seu kubeconfig que suporte autenticação básica
kubectl config set-credentials kubeuser/foo.kubernetes.com --username=kubeuser --password=kubepassword
# salva o namespace permanentemente para todos os comandos subsequentes do kubectl nesse contexto
kubectl config set-context --current --namespace=ggckad-s2
# define um contexto utilizando um nome de usuário e o namespace
kubectl config set-context gce --user=cluster-admin --namespace=foo \
&& kubectl config use-context gce
kubectl config unset users.foo # exclui usuário foo
# alias curto para definir/mostrar contexto/namespace (funciona apenas para bash e shells compatíveis com bash, contexto atual a ser definido antes de usar kn para definir namespace)
alias kx='f() { [ "$1" ] && kubectl config use-context $1 || kubectl config current-context ; } ; f'
alias kn='f() { [ "$1" ] && kubectl config set-context --current --namespace $1 || kubectl config view --minify | grep namespace | cut -d" " -f6 ; } ; f'
apply gerencia aplicações através de arquivos que definem os recursos do Kubernetes. Ele cria e atualiza recursos em um cluster através da execução kubectl apply.
Esta é a maneira recomendada para gerenciar aplicações Kubernetes em ambiente de produção. Veja a documentação do Kubectl.
Manifestos Kubernetes podem ser definidos em YAML ou JSON. As extensões de arquivo .yaml,
.yml, e .json podem ser usadas.
kubectl apply -f ./my-manifest.yaml # cria recurso(s)
kubectl apply -f ./my1.yaml -f ./my2.yaml # cria a partir de vários arquivos
kubectl apply -f ./dir # cria recurso(s) em todos os arquivos de manifesto no diretório
kubectl apply -f https://git.io/vPieo # cria recurso(s) a partir de URL
kubectl create deployment nginx --image=nginx # inicia uma única instância do nginx
# cria um Job que exibe "Hello World"
kubectl create job hello --image=busybox:1.28 -- echo "Hello World"
# cria um CronJob que exibe "Hello World" a cada minuto
kubectl create cronjob hello --image=busybox:1.28 --schedule="*/1 * * * *" -- echo "Hello World"
kubectl explain pods # obtém a documentação de manifesto do pod
# Cria vários objetos YAML a partir de stdin
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: busybox-sleep
spec:
containers:
- name: busybox
image: busybox
args:
- sleep
- "1000000"
---
apiVersion: v1
kind: Pod
metadata:
name: busybox-sleep-less
spec:
containers:
- name: busybox
image: busybox
args:
- sleep
- "1000"
EOF
# Cria um segredo com várias chaves
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
password: $(echo -n "s33msi4" | base64 -w0)
username: $(echo -n "jane" | base64 -w0)
EOF
# Comandos get com saída simples
kubectl get services # Lista todos os serviços do namespace
kubectl get pods --all-namespaces # Lista todos os Pods em todos namespaces
kubectl get pods -o wide # Lista todos os Pods no namespace atual, com mais detalhes
kubectl get deployment my-dep # Lista um deployment específico
kubectl get pods # Lista todos os Pods no namespace
kubectl get pod my-pod -o yaml # Obtém o YAML de um pod
# Comandos describe com saída detalhada
kubectl describe nodes my-node
kubectl describe pods my-pod
# Lista serviços classificados por nome
kubectl get services --sort-by=.metadata.name
# Lista Pods classificados por contagem de reinicializações
kubectl get pods --sort-by='.status.containerStatuses[0].restartCount'
# Lista PersistentVolumes classificados por capacidade
kubectl get pv --sort-by=.spec.capacity.storage
# Obtém a versão da label de todos os Pods com a label app=cassandra
kubectl get pods --selector=app=cassandra -o \
jsonpath='{.items[*].metadata.labels.version}'
# Recupera o valor de uma chave com pontos, por exemplo 'ca.crt'
kubectl get configmap myconfig \
-o jsonpath='{.data.ca\.crt}'
# Recupera um valor codificado em base64 com traços em vez de sublinhados
kubectl get secret my-secret --template='{{index .data "key-name-with-dashes"}}'
# Obtém todos os nós workers (use um seletor para excluir resultados que possuem uma label
# nomeado 'node-role.kubernetes.io/control-plane')
kubectl get node --selector='!node-role.kubernetes.io/control-plane'
# Obtém todos os Pods em execução no namespace
kubectl get pods --field-selector=status.phase=Running
# Obtém ExternalIPs de todos os nós
kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'
# Lista nomes de Pods pertencentes a um RC particular
# O comando "jq" é útil para transformações que são muito complexas para jsonpath, pode ser encontrado em https://stedolan.github.io/jq/
sel=${$(kubectl get rc my-rc --output=json | jq -j '.spec.selector | to_entries | .[] | "\(.key)=\(.value),"')%?}
echo $(kubectl get pods --selector=$sel --output=jsonpath={.items..metadata.name})
# Exibe marcadores para todos os Pods (ou qualquer outro objeto Kubernetes que suporte rotulagem)
kubectl get pods --show-labels
# Verifica quais nós estão prontos
JSONPATH='{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}' \
&& kubectl get nodes -o jsonpath="$JSONPATH" | grep "Ready=True"
# Exibe o segredo decodificado sem utilizar ferramentas externas
kubectl get secret my-secret -o go-template='{{range $k,$v := .data}}{{"### "}}{{$k}}{{"\n"}}{{$v|base64decode}}{{"\n\n"}}{{end}}'
# Lista todos os segredos atualmente em uso por um pod
kubectl get pods -o json | jq '.items[].spec.containers[].env[]?.valueFrom.secretKeyRef.name' | grep -v null | sort | uniq
# Lista todos os containerIDs de initContainer de todos os Pods
# Útil ao limpar contêineres parados, evitando a remoção de initContainers.
kubectl get pods --all-namespaces -o jsonpath='{range .items[*].status.initContainerStatuses[*]}{.containerID}{"\n"}{end}' | cut -d/ -f3
# Lista eventos classificados por timestamp
kubectl get events --sort-by=.metadata.creationTimestamp
# Lista todos eventos do tipo Warning
kubectl events --types=Warning
# Compara o estado atual do cluster com o estado em que o cluster estaria se o manifesto fosse aplicado.
kubectl diff -f ./my-manifest.yaml
# Produz uma árvore delimitada por ponto de todas as chaves retornadas para nós
# Útil ao localizar uma chave em uma estrutura JSON aninhada complexa
kubectl get nodes -o json | jq -c 'paths|join(".")'
# Produz uma árvore delimitada por ponto de todas as chaves retornadas para Pods, etc.
kubectl get pods -o json | jq -c 'paths|join(".")'
# Produz ENV para todos os Pods, supondo que você tenha um contêiner padrão para os Pods, namespace padrão e o comando `env` é compatível.
# Útil ao executar qualquer comando suportado em todos os Pods, não apenas `env`
for pod in $(kubectl get po --output=jsonpath={.items..metadata.name}); do echo $pod && kubectl exec -it $pod -- env; done
# Obtém o status de um sub-recurso de uma implantação
kubectl get deployment nginx-deployment --subresource=status
kubectl set image deployment/frontend www=image:v2 # Aplica o rollout nos containers "www" do deployment "frontend", atualizando a imagem
kubectl rollout history deployment/frontend # Verifica o histórico do deployment, incluindo a revisão
kubectl rollout undo deployment/frontend # Rollback para o deployment anterior
kubectl rollout undo deployment/frontend --to-revision=2 # Rollback para uma revisão específica
kubectl rollout status -w deployment/frontend # Acompanha o status de atualização do "frontend" até sua conclusão sem interrupção
kubectl rollout restart deployment/frontend # Reinicia contínuo do deployment "frontend"
cat pod.json | kubectl replace -f - # Substitue um pod com base no JSON passado para stdin
# Força a substituição, exclui e recria o recurso. Causará uma interrupção do serviço.
kubectl replace --force -f ./pod.json
# Cria um serviço para um nginx replicado, que serve na porta 80 e se conecta aos contêineres na porta 8000
kubectl expose rc nginx --port=80 --target-port=8000
# Atualiza a versão da imagem (tag) de um pod de contêiner único para a v4
kubectl get pod mypod -o yaml | sed 's/\(image: myimage\):.*$/\1:v4/' | kubectl replace -f -
kubectl label pods my-pod new-label=awesome # Adiciona uma label
kubectl label pods my-pod new-label- # Remove a label new-label
kubectl annotate pods my-pod icon-url=http://goo.gl/XXBTWq # Adiciona uma anotação
kubectl autoscale deployment foo --min=2 --max=10 # Escala automaticamente um deployment "foo"
# Atualiza parcialmente um nó
kubectl patch node k8s-node-1 -p '{"spec":{"unschedulable":true}}'
# Atualiza a imagem de um contêiner; spec.containers[*].name é obrigatório porque é uma chave de mesclagem
kubectl patch pod valid-pod -p '{"spec":{"containers":[{"name":"kubernetes-serve-hostname","image":"new image"}]}}'
# Atualiza a imagem de um contêiner usando um patch json com matrizes posicionais
kubectl patch pod valid-pod --type='json' -p='[{"op": "replace", "path": "/spec/containers/0/image", "value":"new image"}]'
# Desativa um livenessProbe de deployment usando um patch json com matrizes posicionais
kubectl patch deployment valid-deployment --type json -p='[{"op": "remove", "path": "/spec/template/spec/containers/0/livenessProbe"}]'
# Adiciona um novo elemento a uma matriz posicional
kubectl patch sa default --type='json' -p='[{"op": "add", "path": "/secrets/1", "value": {"name": "whatever" } }]'
# Atualiza a contagem de réplicas de uma implantação corrigindo seu sub-recurso de escala
kubectl patch deployment nginx-deployment --subresource='scale' --type='merge' -p '{"spec":{"replicas":2}}'
Edita qualquer recurso da API no seu editor preferido.
kubectl edit svc/docker-registry # Edita o serviço chamado docker-registry
KUBE_EDITOR="nano" kubectl edit svc/docker-registry # Usa um editor alternativo
kubectl scale --replicas=3 rs/foo # Escala um replicaset chamado 'foo' para 3
kubectl scale --replicas=3 -f foo.yaml # Escala um recurso especificado em "foo.yaml" para 3
kubectl scale --current-replicas=2 --replicas=3 deployment/mysql # Se o tamanho atual do deployment chamado mysql for 2, escala para 3
kubectl scale --replicas=5 rc/foo rc/bar rc/baz # Escala vários controladores de replicaset
kubectl delete -f ./pod.json # Exclui um Pod usando o tipo e o nome especificados em pod.json
kubectl delete pod unwanted --now ........ # Exclui um Pod imediatamente sem esperar pelo tempo configurado
kubectl delete pod,service baz foo # Exclui Pods e serviços com os mesmos nomes "baz" e "foo"
kubectl delete pods,services -l name=myLabel # Exclui Pods e serviços com o nome da label = myLabel
kubectl -n my-ns delete pod,svc --all # Exclui todos os Pods e serviços no namespace my-ns,
# Exclui todos os Pods que correspondem ao awk pattern1 ou pattern2
kubectl get pods -n mynamespace --no-headers=true | awk '/pattern1|pattern2/{print $1}' | xargs kubectl delete -n mynamespace pod
kubectl logs my-pod # despeja logs de pod (stdout)
kubectl logs -l name=myLabel # despeja logs de pod, com a label de name=myLabel (stdout)
kubectl logs my-pod --previous # despeja logs de pod (stdout) para a instância anterior de um contêiner
kubectl logs my-pod -c my-container # despeja logs de um específico contêiner em um pod (stdout, no caso de vários contêineres)
kubectl logs -l name=myLabel -c my-container # despeja logs de pod, com nome da label = myLabel (stdout)
kubectl logs my-pod -c my-container --previous # despeja logs de um contêiner específico em um pod (stdout, no caso de vários contêineres) para uma instanciação anterior de um contêiner
kubectl logs -f my-pod # Fluxo de logs de pod (stdout)
kubectl logs -f my-pod -c my-container # Fluxo de logs para um específico contêiner em um pod (stdout, caixa com vários contêineres)
kubectl logs -f -l name=myLabel --all-containers # transmite todos os logs de Pods com a label name=myLabel (stdout)
kubectl run -i --tty busybox --image=busybox:1.28 -- sh # Executa pod como shell interativo
kubectl run nginx --image=nginx -n mynamespace # Inicia uma única instância do pod nginx no namespace de mynamespace
kubectl run nginx --image=nginx --dry-run=client -o yaml > pod.yaml
# Gera a especificação para executar o pod nginx e grave-a em um arquivo chamado pod.yaml
kubectl attach my-pod -i # Anexa ao contêiner em execução
kubectl port-forward my-pod 5000:6000 # Ouça na porta 5000 na máquina local e encaminhe para a porta 6000 no my-pod
kubectl exec my-pod -- ls / # Executa comando no pod existente (1 contêiner)
kubectl exec --stdin --tty my-pod -- /bin/sh # Acesso de shell interativo a um pod em execução (apenas 1 contêiner)
kubectl exec my-pod -c my-container -- ls / # Executa comando no pod existente (pod com vários contêineres)
kubectl top pod POD_NAME --containers # Mostra métricas para um determinado pod e seus contêineres
kubectl top pod POD_NAME --sort-by=cpu # Mostra métricas para um determinado pod e classificá-lo por 'cpu' ou 'memória'
kubectl cp /tmp/foo_dir my-pod:/tmp/bar_dir # Copia o diretório local /tmp/foo_dir para /tmp/bar_dir em um pod remoto no namespace atual
kubectl cp /tmp/foo my-pod:/tmp/bar -c my-container # Copia o arquivo local /tmp/foo para /tmp/bar em um pod remoto em um contêiner específico
kubectl cp /tmp/foo my-namespace/my-pod:/tmp/bar # Copia o arquivo local /tmp/foo para /tmp/bar em um pod remoto no namespace my-namespace
kubectl cp my-namespace/my-pod:/tmp/foo /tmp/bar # Copia /tmp/foo de um pod remoto para /tmp/bar localmente
kubectl cp requer que o binário 'tar' esteja presente em sua imagem de contêiner. Se 'tar' não estiver presente, kubectl cp falhará.
Para casos de uso avançado, como links simbólicos, expansão curinga ou preservação do modo de arquivo, considere usar kubectl exec.tar cf - /tmp/foo | kubectl exec -i -n my-namespace my-pod -- tar xf - -C /tmp/bar # Copia o arquivo local /tmp/foo para /tmp/bar em um pod remoto no namespace my-namespace
kubectl exec -n my-namespace my-pod -- tar cf - /tmp/foo | tar xf - -C /tmp/bar # Copia /tmp/foo de um pod remoto para /tmp/bar localmente
kubectl logs deploy/my-deployment # despeja logs de pod para uma implantação (caso de contêiner único)
kubectl logs deploy/my-deployment -c my-container # despeja logs de pod para uma implantação (caso de vários contêineres)
kubectl port-forward svc/my-service 5000 # escuta na porta local 5000 e encaminhe para a porta 5000 no back-end do serviço
kubectl port-forward svc/my-service 5000:my-service-port # escuta na porta local 5000 e encaminhe para a porta de destino do serviço com o nome <my-service-port>
kubectl port-forward deploy/my-deployment 5000:6000 # escuta na porta local 5000 e encaminhe para a porta 6000 em um pod criado por <my-deployment>
kubectl exec deploy/my-deployment -- ls # executa o comando no primeiro pod e primeiro contêiner na implantação (casos de um ou vários contêineres)
kubectl cordon my-node # Marca o nó my-node como não agendável
kubectl drain my-node # Drena o nó my-node na preparação para manutenção
kubectl uncordon my-node # Marca nó my-node como agendável
kubectl top node my-node # Mostra métricas para um determinado nó
kubectl cluster-info # Exibe endereços da master e serviços
kubectl cluster-info dump # Despeja o estado atual do cluster no stdout
kubectl cluster-info dump --output-directory=/path/to/cluster-state # Despeja o estado atual do cluster em /path/to/cluster-state
# Veja os taints existentes nos nós atuais.
kubectl get nodes -o='custom-columns=NodeName:.metadata.name,TaintKey:.spec.taints[*].key,TaintValue:.spec.taints[*].value,TaintEffect:.spec.taints[*].effect'
# Se uma `taint` com essa chave e efeito já existir, seu valor será substituído conforme especificado.
kubectl taint nodes foo dedicated=special-user:NoSchedule
Lista todos os tipos de recursos suportados junto com seus nomes abreviados, grupo de API, sejam eles namespaced e Kind:
kubectl api-resources
Outras operações para explorar os recursos da API:
kubectl api-resources --namespaced=true # Todos os recursos com namespace
kubectl api-resources --namespaced=false # Todos os recursos sem namespace
kubectl api-resources -o name # Todos os recursos com saída simples (apenas o nome do recurso)
kubectl api-resources -o wide # Todos os recursos com saída expandida (também conhecida como "ampla")
kubectl api-resources --verbs=list,get # Todos os recursos que suportam os verbos de API "list" e "get"
kubectl api-resources --api-group=extensions # Todos os recursos no grupo de API "extensions"
Para enviar detalhes para a janela do terminal em um formato específico, adicione a flag -o (ou --output) para um comando kubectl suportado.
| Formato de saída | Descrição |
|---|---|
-o=custom-columns=<spec> |
Exibe uma tabela usando uma lista separada por vírgula de colunas personalizadas |
-o=custom-columns-file=<filename> |
Exibe uma tabela usando o modelo de colunas personalizadas no arquivo <nome do arquivo> |
-o=json |
Saída de um objeto de API formatado em JSON |
-o=jsonpath=<template> |
Exibe os campos definidos em uma expressão jsonpath |
-o=jsonpath-file=<filename> |
Exibe os campos definidos pela expressão jsonpath no arquivo <nome do arquivo> |
-o=name |
Exibe apenas o nome do recurso e nada mais |
-o=wide |
Saída no formato de texto sem formatação com qualquer informação adicional e, para Pods, o nome do nó está incluído |
-o=yaml |
Saída de um objeto de API formatado em YAML |
Exemplos usando -o=custom-columns:
# Todas as imagens em execução em um cluster
kubectl get pods -A -o=custom-columns='DATA:spec.containers[*].image'
# Todas as imagens em execução no namespace: padrão, agrupadas por pod
kubectl get pods --namespace default --output=custom-columns="NAME:.metadata.name,IMAGE:.spec.containers[*].image"
# Todas as imagens excluindo "registry.k8s.io/coredns:1.6.2"
kubectl get pods -A -o=custom-columns='DATA:spec.containers[?(@.image!="registry.k8s.io/coredns:1.6.2")].image'
# Todos os campos sob metadados, independentemente do nome
kubectl get pods -A -o=custom-columns='DATA:metadata.*'
Mais exemplos na documentação de referência do kubectl.
A verbosidade do Kubectl é controlado com as flags -v ou --v seguidos por um número inteiro representando o nível do log. As convenções gerais de log do Kubernetes e os níveis de log associados são descritos aqui.
| Verbosidade | Descrição |
|---|---|
--v=0 |
Geralmente útil para sempre estar visível para um operador de cluster. |
--v=1 |
Um nível de log padrão razoável se você não deseja verbosidade. |
--v=2 |
Informações úteis sobre o estado estacionário sobre o serviço e mensagens importantes de log que podem se correlacionar com alterações significativas no sistema. Este é o nível de log padrão recomendado para a maioria dos sistemas. |
--v=3 |
Informações estendidas sobre alterações. |
--v=4 |
Detalhamento no nível de debugging. |
--v=5 |
Verbosidade do nível de rastreamento. |
--v=6 |
Exibe os recursos solicitados. |
--v=7 |
Exibe cabeçalhos de solicitação HTTP. |
--v=8 |
Exibe conteúdo da solicitação HTTP. |
--v=9 |
Exibe o conteúdo da solicitação HTTP sem o truncamento do conteúdo. |
Leia a visão geral do kubectl e aprenda sobre JsonPath.
Veja as opções do kubectl.
Leia as Convenções de uso do kubectl para entender como usá-lo em scripts reutilizáveis.
Ver mais comunidade kubectl cheatsheets.
O Kubernetes contém várias ferramentas internas para ajudá-lo a trabalhar com o sistema Kubernetes.
kubectl é a ferramenta de linha de comando para o Kubernetes. Ela controla o gerenciador de cluster do Kubernetes.
kubeadm é a ferramenta de linha de comando para provisionar facilmente um cluster Kubernetes seguro sobre servidores físicos ou na nuvem ou em máquinas virtuais (atualmente em alfa).
minikube é uma ferramenta que facilita a execução local de um cluster Kubernetes de nó único em sua estação de trabalho para fins de desenvolvimento e teste.
Dashboard, a interface Web do Kubernetes, permite implantar aplicativos em contêiner em um cluster do Kubernetes, solucionar problemas e gerenciar o cluster e seus próprios recursos.
Kubernetes Helm é uma ferramenta para gerenciar pacotes de recursos pré-configurados do Kubernetes, também conhecidos como Kubernetes charts.
Use o Helm para:
Kompose é uma ferramenta para ajudar os usuários do Docker Compose a migrar para o Kubernetes.
Use o Kompose para:
yaml do Docker Compose v1 ou v2 ou Bundles de Aplicativos Distribuídos