Você pode usar um registro de contêiner externo com Tanzu Kubernetes pods de cluster. Esta é uma alternativa ao uso do Harbor Registry incorporado.
Caso de uso de registro privado externo
Os registros de contêiner fornecem uma função crítica para implantações do Kubernetes, servindo como um repositório centralizado para armazenar e compartilhar imagens de contêiner. O registro de contêiner público mais comumente usado é o DockerHub . Há muitas ofertas de registro de contêineres privados. VMware Harbor é um registro de contêiner privado de código aberto, nativo da nuvem. vSphere with Tanzu incorpora uma instância do Harbor que você pode usar como o registro de contêiner privado para vSphere Pods e para pods em execução em clusters do Tanzu Kubernetes. Para obter mais informações, consulte Ative o Harbor Registry incorporado no Supervisor Cluster.
O Harbor Registry incorporado que vem com o vSphere with Tanzu requer NSX-T rede. Se você estiver usando a rede do vSphere, não poderá usá-la. Além disso, você pode já estar executando seu próprio registro de contêiner privado que deseja integrar com seus clusters do Tanzu Kubernetes. Nesse caso, você pode configurar o Tanzu Kubernetes Grid Service para confiar em registros privados com certificados autoassinados, permitindo que os pods do Kubernetes em execução nos clusters do Tanzu Kubernetes usem o registro externo.
Requisitos de registro privado externo
Para usar um registro privado externo com clusters do Tanzu Kubernetes, você deve usar o U2 da versão 7 do vSphere with Tanzu ou posterior.
Você só pode usar seu próprio registro privado com pods do Kubernetes que são executados em Tanzu Kubernetes clusters e Tanzu Kubernetes release VMs de nó. Você não pode usar seu próprio registro privado com o vSphere Pods que é executado nativamente em hosts ESXi. O registro com suporte para vSphere Pods é o Harbor Registry que está incorporado na plataforma vSphere with Tanzu.
Depois de configurar o Tanzu Kubernetes Grid Service para um registro privado, qualquer novo cluster provisionado oferecerá suporte ao registro privado. Para que os clusters existentes ofereçam suporte ao registro privado, é necessária uma atualização contínua para aplicar o TkgServiceConfiguration
. Consulte Atualizar Tanzu Kubernetes clusters. Além disso, na primeira vez que você criar um TkgServiceConfiguration
personalizado, o sistema iniciará uma atualização contínua.
Configuração de registro privado externo
Para usar seu próprio registro privado com clusters do Tanzu Kubernetes, configure o Tanzu Kubernetes Grid Service com um ou mais certificados autoassinados para servir o conteúdo do registro privado sobre HTTPS.
O TkgServiceConfiguration
é atualizado para oferecer suporte a certificados autoassinados para o registro privado. Especificamente, uma nova seção trust
com o campo additionalTrustedCAs
é adicionada, permitindo que você defina qualquer número de certificados autoassinados nos quais os clusters do Tanzu Kubernetes devem confiar. Essa funcionalidade permite que você defina facilmente uma lista de certificados e atualize esses certificados caso eles precisem de rotação.
Depois que o TkgServiceConfiguration
for atualizado e aplicado, os certificados TLS serão aplicados a novos clusters na próxima vez que um cluster for criado. Em outras palavras, a aplicação de uma atualização para TkgServiceConfiguration.trust.additionalTrustedCAs
não aciona uma atualização contínua automática de Tanzu Kubernetes clusters.
apiVersion: run.tanzu.vmware.com/v1alpha1 kind: TkgServiceConfiguration metadata: name: tkg-service-configuration spec: defaultCNI: antrea trust: additionalTrustedCAs: - name: first-cert-name data: base64-encoded string of a PEM encoded public cert 1 - name: second-cert-name data: base64-encoded string of a PEM encoded public cert 2
kubectl apply -f tkgserviceconfiguration.yaml
Como a especificação do Tanzu Kubernetes Grid Service está sendo atualizada com os certificados de registro privado, você não precisa adicionar a chave pública ao kubeconfig do cluster Tanzu Kubernetes como você faz ao usar o Harbor Registry incorporado com os clusters do Tanzu Kubernetes.
Configurar uma Tanzu Kubernetes carga de trabalho para extrair imagens de um registro de contêiner privado
Para obter imagens de um registro de contêiner privado para uma carga de trabalho de cluster do Tanzu Kubernetes, configure o YAML da carga de trabalho com os detalhes do registro privado.
- Crie uma especificação de pod de exemplo com os detalhes sobre o registro privado.
apiVersion: v1 kind: Pod metadata: name: <workload-name> namespace: <kubernetes-namespace> spec: containers: - name: private-reg-container image: <Registry-IP-Address>/<vsphere-namespace>/<image-name>:<version> imagePullSecrets: - name: <registry-secret-name>
- Substitua
<workload-name>
pelo nome da carga de trabalho do pod. - Substitua
<kubernetes-namespace>
pelo namespace Kubernetes no cluster em que o pod será criado. Deve ser o mesmo namespace do Kubernetes no qual o segredo de recepção da imagem do Serviço de Registro está armazenado no cluster Tanzu Kubernetes (como o namespace padrão). - Substitua
<Registry-IP-Address>
pelo endereço IP da instância Harbor Registry incorporada em execução no Supervisor Cluster. - Substitua <vsphere-namespace> pelo vSphere Namespace onde o destino Tanzu Kubernetes está provisionado.
- Substitua
<image-name>
por um nome de imagem de sua escolha. - Substitua
<version>
por uma versão apropriada da imagem, como "mais recente". - Substitua
<registry-secret-name>
pelo nome do segredo de recepção da imagem do Serviço de Registro que você criou anteriormente.
- Substitua
- Crie uma carga de trabalho no cluster Tanzu Kubernetes com base na especificação do pod que você definiu.
kubectl --kubeconfig=<path>/cluster-kubeconfig apply -f <pod.yaml>
O pod deve ser criado a partir da imagem extraída do registro.
Campos de confiança para registros privados externos
Adicione uma entrada de certificado (cadeia de caracteres codificada em base64 de um certificado público codificado em PEM) à seção additionalTrustedCAs
no TkgServiceConfiguration
. Os dados são certificados públicos armazenados em texto sem formatação no TkgServiceConfiguration.
Campo | Descrição |
---|---|
trust |
Marcador de seção. Não aceita dados. |
additionalTrustedCAs |
Marcador de seção. Inclui uma matriz de certificados com nome e dados para cada um. |
name |
O nome do certificado TLS. |
data |
A cadeia de caracteres codificada em base64 de um certificado público codificado por PEM. |
Removendo certificados de registro privado externo
Remova um certificado da lista de certificados na seção additionalTrustedCAs
no TkgServiceConfiguration
e aplique o TkgServiceConfiguration
ao Tanzu Kubernetes Grid Service.
Certificados de registro privado externo rotativo
Para alternar um certificado, o administrador de VI ou o engenheiro de DevOps alteraria o conteúdo do certificado na especificação do cluster TkgServiceConfiguration
ou Tanzu Kubernetes e aplicaria essa configuração para acionar uma atualização contínua desse TKC.
Solução de problemas de certificados de registro privado externo
Se você configurar o Tanzu Kubernetes Grid Service com os certificados para confiar e adicionar o certificado autoassinado ao cluster kubeconfig, deverá ser capaz de extrair com êxito uma imagem de contêiner de um registro privado que usa esse certificado autoassinado.
O comando a seguir pode ajudar a determinar se a imagem do contêiner foi extraída com êxito para uma carga de trabalho de pod:
kubectl describe pod PODNAME
Esse comando mostra o status detalhado e as mensagens de erro para um determinado pod. Um exemplo de tentativa de extrair uma imagem antes de adicionar certificados personalizados ao cluster:
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 33s default-scheduler ... Normal Image 32s image-controller ... Normal Image 15s image-controller ... Normal SuccessfulRealizeNSXResource 7s (x4 over 31s) nsx-container-ncp ... Normal Pulling 7s kubelet Waiting test-gc-e2e-demo-ns/testimage-8862e32f68d66f727d1baf13f7eddef5a5e64bbd-v10612 Warning Failed 4s kubelet failed to get images: ... Error: ... x509: certificate signed by unknown authority
kubectl get pods
ErrImagePull
também é visível na exibição geral do status do Pod:
NAME READY STATUS RESTARTS AGE testimage-nginx-deployment-89d4fcff8-2d9pz 0/1 Pending 0 17s testimage-nginx-deployment-89d4fcff8-7kp9d 0/1 ErrImagePull 0 79s testimage-nginx-deployment-89d4fcff8-7mpkj 0/1 Pending 0 21s testimage-nginx-deployment-89d4fcff8-fszth 0/1 ErrImagePull 0 50s testimage-nginx-deployment-89d4fcff8-sjnjw 0/1 ErrImagePull 0 48s testimage-nginx-deployment-89d4fcff8-xr5kg 0/1 ErrImagePull 0 79sOs erros "x509: certificado assinado por autoridade desconhecida" e "ErrImagePull" indicam que o cluster não está configurado com o certificado correto para se conectar ao registro de contêiner privado. O certificado está ausente ou está configurado incorretamente.
Se você estiver enfrentando erros ao se conectar a um registro privado depois de configurar os certificados, poderá verificar se os certificados aplicados na configuração são aplicados ao cluster. Você pode verificar se os certificados foram aplicados em sua configuração usando o SSH.
- Verifique a pasta
/etc/ssl/certs/
para arquivos denominadostkg-<cert_name>.pem
, onde<cert_name>
é a propriedade "name" do certificado adicionado emTkgServiceConfiguration
. Se os certificados corresponderem ao que está emTkgServiceConfiguration
e o uso de um registro privado ainda não funcionar, faça um diagnóstico mais detalhado concluindo a próxima etapa. - Execute o seguinte teste de conexão openssl com o servidor de destino usando certificados autoassinados executando o comando
openssl s_client -connect hostname:port_num
, onde hostname é o nome do host / nome DNS do registro privado que está usando certificados autoassinados e port_num é o número da porta no qual o serviço está sendo executado (normalmente 443 para HTTPS). Você pode verificar exatamente qual erro está sendo retornado pelo openssl ao tentar se conectar ao endpoint que está usando certificados autoassinados e corrigir a situação a partir daí, por exemplo, adicionando os certificados corretos aoTkgServiceConfiguration
. Se o cluster Tanzu Kubernetes estiver incorporado com o certificado errado, você precisará atualizar a configuração do Tanzu Kubernetes Grid Service com os certificados corretos, excluir o cluster Tanzu Kubernetes e recriá-lo usando a configuração que contém os certificados corretos.