Puede utilizar el registro de Harbor integrado para que actúe como registro de contenedor privado de las imágenes que implemente en los clústeres de Tanzu Kubernetes que aprovisiona servicio Tanzu Kubernetes Grid.

vSphere with Tanzu incrusta una instancia del registro de Harbor que puede habilitar en el clúster supervisor y utilizar para implementar cargas de trabajo basadas en contenedores en clústeres de Tanzu Kubernetes.

Una vez que el registro de Harbor integrado esté habilitado en el clúster supervisor, servicio Tanzu Kubernetes Grid instalará en los nodos del clúster de Tanzu Kubernetes el certificado de CA raíz para la instancia del registro. Este certificado se instala en los clústeres nuevos y en los clústeres existentes (a través de un bucle de reconciliación). A partir de ese momento, podrá ejecutar imágenes en el clúster especificando el registro privado en el YAML de carga de trabajo.

Flujo de trabajo

Utilice el siguiente flujo de trabajo para acceder de forma segura al registro privado desde los nodos del clúster de Tanzu Kubernetes y extraer imágenes del contenedor.
Paso Acción Instrucciones
0 Revise el flujo de trabajo para usar el registro de Harbor integrado con clústeres de Tanzu Kubernetes. Consulte Usar un registro de contenedores para cargas de trabajo de vSphere with Tanzu.
1 Habilite el registro de Harbor integrado en el clúster supervisor. Consulte Habilitar el registro de Harbor integrado en el clúster supervisor.
2 Configure kubeconfig para cada clúster con el secreto del servicio de registro. Consulte las instrucciones a continuación: configure un clúster de Tanzu Kubernetes con el secreto de extracción de imágenes del registro de Harbor integrado.
3 Configure el YAML de carga de trabajo para especificar el registro de contenedor privado. Consulte las instrucciones a continuación: configure un clúster de Tanzu Kubernetes con el secreto de extracción de imágenes del registro de Harbor integrado.
4 Para insertar imágenes en el registro de Harbor integrado, configure un cliente de Docker e instale el complemento auxiliar de credenciales de vSphere Docker. Consulte Configurar un cliente de Docker con un certificado de registro de Harbor integrado y Insertar imágenes en el registro de Harbor integrado.

Configurar un clúster de Tanzu Kubernetes con el secreto de extracción de imágenes del registro de Harbor integrado

Configure kubeconfig con el secreto de extracción de imágenes para conectar un clúster de Tanzu Kubernetes a un registro de contenedor privado, ya sea el registro de Harbor integrado o un registro privado externo.
  1. Conéctese al clúster supervisor. Consulte Conectarse al clúster supervisor como usuario vCenter Single Sign-On.
  2. Cambie el contexto al espacio de nombres de vSphere donde se aprovisiona el clúster de Tanzu Kubernetes de destino.
    kubectl config use-context tkgs-cluster-ns
  3. Obtenga el secreto de extracción de imágenes para el espacio de nombres de vSphere y guárdelo en un archivo.
    kubectl get secret -n <vsphere-namespace> <vsphere-namespace>-default-image-pull-secret -o yaml > <path>/image-pull-secret.yaml
    Por ejemplo:
    kubectl get secret -n tkgs-cluster-ns tkgs-cluster-ns-default-image-pull-secret -o yaml > tanzu/image-pull-secret.yaml
  4. Abra image-pull-secret.yaml con un editor de texto. Como mínimo, realice los cambios necesarios y guarde el archivo cuando haya terminado.
    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
    
    • OBLIGATORIO: Cambie el valor de namespace para que coincida con un espacio de nombres de Kubernetes adecuado del clúster, como default.
      Nota: Para configurar el secreto de extracción de imágenes, especifique un espacio de nombres de Kubernetes. Si el clúster de Tanzu Kubernetes ya existe, cambie su contexto y ejecute kubectl get namespaces para enumerar los espacios de nombres de Kubernetes disponibles. Si es necesario, cree el espacio de nombres de destino antes de continuar. Si el clúster de Tanzu Kubernetes no existe, puede utilizar el espacio de nombres de default.
    • OPCIONAL: cambie el valor de name por un nombre que tenga sentido, como harbor-registry-secret o private-registry-secret.
  5. Cree un archivo kubeconfig que se pueda utilizar para acceder al clúster de Tanzu Kubernetes.
    kubectl get secret -n <vsphere-namespace> <cluster-name>-kubeconfig -o jsonpath='{.data.value}' | base64 -d > <path>/cluster-kubeconfig
    
    Reemplace <vsphere-namespace> por el nombre del espacio de nombres de vSphere en el que se aprovisiona el clúster de Tanzu Kubernetes de destino. Reemplace <cluster-name> por el nombre del clúster de Tanzu Kubernetes.
    kubectl get secret -n tkgs-cluster-ns tkgs-cluster-5-kubeconfig -o jsonpath='{.data.value}' | base64 -d > tanzu/cluster-kubeconfig
  6. Cree el secreto del servicio de registro en el clúster de Tanzu Kubernetes. Consulte el archivo del secreto de extracción de imágenes que guardó y actualizó en local.
    kubectl --kubeconfig=<path>/cluster-kubeconfig apply -f <path>/image-pull-secret.yaml
    Por ejemplo:
    kubectl --kubeconfig=tanzu/cluster-kubeconfig apply -f tanzu/image-pull-secret.yaml
    Debería ver que el secreto del servicio de registro se creó correctamente.
    secret/harbor-registry-secret created

Configurar una carga de trabajo de Tanzu Kubernetes para extraer imágenes de un registro de contenedor privado

Para extraer imágenes de un registro de contenedor privado para una carga de trabajo del clúster de Tanzu Kubernetes, configure el YAML de carga de trabajo con los detalles del registro privado.

Este procedimiento se puede utilizar para extraer imágenes de un registro de contenedor privado o del registro de Harbor incrustado. En este ejemplo, creamos una especificación de pod que utilizará una imagen almacenada en el registro de Harbor integrado y utilizará el secreto de extracción de imágenes que se configuró anteriormente.
  1. Cree un ejemplo de especificación de Pod con los detalles del 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>
    • Reemplace <workload-name> por el nombre de la carga de trabajo del pod.
    • Reemplace <kubernetes-namespace> por el espacio de nombres de Kubernetes del clúster en el que se creará el pod. Debe ser el mismo espacio de nombres de Kubernetes en el que se almacena el secreto de extracción de imágenes del servicio de registro en el clúster de Tanzu Kubernetes (por ejemplo, el espacio de nombres predeterminado).
    • Reemplace <Registry-IP-Address> por la dirección IP de la instancia del registro de Harbor integrado que se ejecuta en el clúster supervisor.
    • Reemplace <vsphere-namespace> por el espacio de nombres de vSphere en el que se aprovisiona la instancia de Tanzu Kubernetes de destino.
    • Reemplace <image-name> por el nombre de imagen que desee.
    • Reemplace <version> por una versión adecuada de la imagen (por ejemplo, "más reciente").
    • Reemplace <registry-secret-name> por el nombre del secreto de extracción de imágenes del servicio de registro que creó anteriormente.
  2. Cree una carga de trabajo en el clúster de Tanzu Kubernetes basada en la especificación de pod que definió.
    kubectl --kubeconfig=<path>/cluster-kubeconfig apply -f <pod.yaml>

    El pod se debe crear a partir de la imagen extraída del registro.