Você pode usar o Harbor Registry incorporado para servir como o registro de contêiner privado para imagens que você implanta em clusters do Tanzu Kubernetes provisionados pelo Tanzu Kubernetes Grid Service.

O vSphere with Tanzu incorpora uma instância do Harbor Registry que você pode ativar no Supervisor Cluster e usar para implantar cargas de trabalho baseadas em contêiner em clusters do Tanzu Kubernetes.

Quando o Harbor Registry incorporado estiver ativado no Supervisor Cluster, o Tanzu Kubernetes Grid Service instalará nos nós do cluster Tanzu Kubernetes o certificado da autoridade de certificação raiz para a instância do registro. Esse certificado é instalado em novos clusters e em clusters existentes (por meio de um loop de reconciliação). A partir daí, você pode executar imagens no cluster especificando o registro privado no YAML da carga de trabalho.

Fluxo de trabalho

Use o seguinte fluxo de trabalho para acessar com segurança o registro privado dos nós de cluster do Tanzu Kubernetes e extrair imagens de contêiner.
Etapa Ação Instruções
0 Revise o fluxo de trabalho para usar o Harbor Registry incorporado com clusters Tanzu Kubernetes. Consulte o Usando um Container Registry para vSphere with Tanzu cargas de trabalho.
1 Ative o Harbor Registry incorporado no Cluster de Supervisor. Consulte o Ative o Harbor Registry incorporado no Supervisor Cluster.
2 Configure o kubeconfig para cada cluster com o segredo do serviço de registro. Consulte as instruções abaixo: Configure um cluster de Tanzu Kubernetes com o segredo de recepção de imagem para o Harbor Registry incorporado.
3 Configure o YAML da carga de trabalho para especificar o registro do contêiner privado. Consulte as instruções abaixo: Configure um cluster de Tanzu Kubernetes com o segredo de recepção de imagem para o Harbor Registry incorporado.
4 Para enviar imagens para o Harbor Registry incorporado, configure um cliente Docker e instale o vSphere Docker Credential Helper. Consulte Configurar um cliente Docker com o certificado Harbor Registry incorporado e Enviar imagens para o incorporado Harbor Registry.

Configurar um Tanzu Kubernetes cluster com o segredo de recepção de imagem para o incorporado Harbor Registry

Configure seu kubeconfig com o segredo de recepção de imagem para conectar um cluster de Tanzu Kubernetes a um registro de contêiner privado, seja o Harbor Registry incorporado ou um registro privado externo.
  1. Conecte-se ao Supervisor Cluster. Consulte o Conecte-se ao Supervisor Cluster como um usuário do vCenter Single Sign-On.
  2. Alterne o contexto para o vSphere Namespace onde o cluster Tanzu Kubernetes de destino está provisionado.
    kubectl config use-context tkgs-cluster-ns
  3. Obtenha o segredo de recepção de imagem para o vSphere Namespace e armazene-o em um arquivo.
    kubectl get secret -n <vsphere-namespace> <vsphere-namespace>-default-image-pull-secret -o yaml > <path>/image-pull-secret.yaml
    Por exemplo:
    kubectl get secret -n tkgs-cluster-ns tkgs-cluster-ns-default-image-pull-secret -o yaml > tanzu/image-pull-secret.yaml
  4. Abra o image-pull-secret.yaml com um editor de texto. No mínimo, faça as alterações necessárias e salve o arquivo quando terminar.
    apiVersion: v1
    data:
      .dockerconfigjson: ewoJCQkJImF1dGhzJUV2s1ZVZwWVFuWmp...
    kind: Secret
    metadata:
      creationTimestamp: "2020-11-12T02:41:08Z"
      managedFields:
      - apiVersion: v1
        ...
      name: harbor-registry-secret   #OPTIONAL: Change if desired
      namespace: default           #REQUIRED: Enter the Kuberentes namespace
      ownerReferences:
      - apiVersion: registryagent.vmware.com/v1alpha1
        ...
      resourceVersion: "675868"
      selfLink: /api/v1/namespaces/tkgs-cluster-ns/secrets/tkgs-cluster-ns-default-image-pull-secret
      uid: 66606b41-7363-4b74-a3f2-4436f83f
    type: kubernetes.io/dockerconfigjson
    
    • OBRIGATÓRIO: altere o valor de namespace para corresponder a um namespace Kubernetes apropriado no cluster, como default .
      Observação: Para configurar o segredo de recepção da imagem, especifique um namespace do Kubernetes. Se o cluster Tanzu Kubernetes já existir, alterne o contexto para ele e execute kubectl get namespaces para listar os namespaces do Kubernetes disponíveis. Se necessário, crie o namespace de destino antes de prosseguir. Se o cluster Tanzu Kubernetes não existir, você poderá usar o namespace default.
    • OPCIONAL: altere o valor de name para algo significativo, como harbor-registry-secret ou private-registry-secret .
  5. Crie um arquivo kubeconfig que possa ser usado para acessar o cluster Tanzu Kubernetes.
    kubectl get secret -n <vsphere-namespace> <cluster-name>-kubeconfig -o jsonpath='{.data.value}' | base64 -d > <path>/cluster-kubeconfig
    
    Substitua <vsphere-namespace> pelo nome do vSphere Namespace onde o cluster de destino Tanzu Kubernetes está provisionado. Substitua <cluster-name> pelo nome do cluster Tanzu Kubernetes.
    kubectl get secret -n tkgs-cluster-ns tkgs-cluster-5-kubeconfig -o jsonpath='{.data.value}' | base64 -d > tanzu/cluster-kubeconfig
  6. Crie o segredo do serviço de registro no cluster Tanzu Kubernetes. Faça referência ao arquivo secreto de recepção de imagem que você salvou e atualizou localmente.
    kubectl --kubeconfig=<path>/cluster-kubeconfig apply -f <path>/image-pull-secret.yaml
    Por exemplo:
    kubectl --kubeconfig=tanzu/cluster-kubeconfig apply -f tanzu/image-pull-secret.yaml
    Você verá que o segredo do Serviço de Registro foi criado com êxito.
    secret/harbor-registry-secret created

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.

Esse procedimento pode ser usado para extrair imagens de um registro de contêiner privado ou do Harbor Registry incorporado. Neste exemplo, criamos uma especificação de pod que usará uma imagem armazenada no Harbor Registry incorporado e usará o segredo de recepção de imagem configurado anteriormente.
  1. 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.
  2. 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.