Consulte este tema para integrar clústeres de Servicio TKG con un registro de contenedor privado.
Caso de uso del registro de contenedor privado
Los registros de contenedores proporcionan una función crítica para las implementaciones de Kubernetes, y sirven como repositorio centralizado para almacenar y compartir imágenes de contenedor. El registro de contenedor público utilizado con más frecuencia es Docker Hub. Existen muchas ofertas de registros de contenedores privados. VMware Harbor es un registro de contenedor privado, nativo en la nube y de código abierto que viene con Supervisor.
Integración del registro de contenedor privado
Para integrar un registro privado con un clúster de Servicio TKG, configure el clúster con uno o más certificados de CA autofirmados para que proporcione contenido de registro privado a través de HTTPS. Para ello, en la especificación del clúster se incluye un campo trust
con el valor additionalTrustedCAs
. Puede definir cualquier número de certificados de CA autofirmados en los que el clúster de TKGS debe confiar. Esta funcionalidad permite definir fácilmente una lista de certificados y actualizar los que necesiten rotación.
Puede configurar el certificado de registro privado la primera vez que crea el clúster o puede actualizar un clúster existente y proporcionar el certificado del registro privado. Para editar un clúster existente y agregar el certificado del registro privado, utilice el método de kubectl edit
. Consulte Configurar un editor de texto para Kubectl.
Tenga en cuenta que la implementación del campo trust.additionalTrustedCAs
difiere ligeramente entre las API compatibles para aprovisionar clústeres de TKGS. Consulte las tablas Campos de confianza de API v1alpha3 y Variable de confianza de la API v1beta1 para obtener más información.
Ejemplo de API v1alpha3
El siguiente ejemplo demuestra cómo integrar un clúster de Servicio TKG aprovisionado mediante la API v1alpha3 con un registro de contenedor privado usando su certificado de CA.
trust.additionalTrustedCAs
incluye uno o varios pares nombre-datos, cada uno de los cuales puede incluir un certificado de TLS para un registro privado.
Campo | Descripción |
---|---|
trust |
Marcador de sección. No acepta datos. |
additionalTrustedCAs |
Marcador de sección. Incluye una matriz de certificados con campos de name y data para cada uno. |
name |
Nombre definido por el usuario del certificado de CA. |
data |
Contenido del certificado de CA (ca.crt ) en formato PEM que está doblemente codificado en base64.
Nota: La API v1alpha3 requiere que el contenido del certificado esté codificado en base64 único. Si el contenido no tiene codificación base6 única, no se puede procesar el archivo PEM resultante.
|
- Descargue el certificado de registro de Harbor desde la interfaz web de Harbor en la pantalla .
El archivo de certificado de CA se descarga como
ca.crt
. - El contenido del certificado de CA se codifica con una sola base64.
- Linux:
base64 -w 0 ca.crt
- Windows: https://www.base64encode.org/.
- Linux:
- Incluya los campos
trust.additionalTrustedCAs
en la especificación del clúster y rellene con los valoresname
ydata
.#tkc-with-trusted-private-reg-cert.yaml apiVersion: run.tanzu.vmware.com/v1alpha3 kind: TanzuKubernetesCluster metadata: name: tkc01 namespace: tkgs-cluster-ns spec: topology: controlPlane: replicas: 3 storageClass: tkgs-storage-policy vmClass: guaranteed-medium tkr: reference: name: v1.25.7---vmware.3-fips.1-tkg.1 nodePools: - name: nodepool-01 replicas: 3 storageClass: tkgs-storage-policy vmClass: guaranteed-medium tkr: reference: name: v1.25.7---vmware.3-fips.1-tkg.1 settings: storage: defaultClass: tkgs-storage-policy network: cni: name: antrea services: cidrBlocks: ["198.51.100.0/12"] pods: cidrBlocks: ["192.0.2.0/16"] serviceDomain: cluster.local trust: additionalTrustedCAs: - name: CompanyInternalCA-1 data: LS0tLS1C...LS0tCg== - name: CompanyInternalCA-2 data: MTLtMT1C...MT0tPg==
- Para rotar un certificado,
kubectl edit
la especificación del clúster y actualice el valor detrust.additionalTrustedCAs.data
y, a continuación, inicie una actualización gradual.
Ejemplo de API v1beta1
En el siguiente ejemplo, se describe cómo integrar un clúster de Servicio TKG aprovisionado mediante la API v1beta1 con un registro de contenedor privado usando su certificado de CA.
Campo | Descripción |
---|---|
trust |
Marcador de sección. No acepta datos. |
additionalTrustedCAs |
Marcador de sección. Incluye una matriz de certificados con el nombre para cada uno. |
name |
El nombre definido por el usuario para el campo de asignación de data en el secreto de Kubernetes que contiene el certificado de CA en formato PEM con codificación base64 doble.
Nota: La API v1beta1 requiere que el contenido del certificado tenga doble codificación base64. Si el contenido no tiene doble codificación base6, no se puede procesar el archivo PEM resultante.
|
- Descargue el certificado de registro de Harbor desde la interfaz web de Harbor en la pantalla .
El archivo de certificado de CA se descarga como
ca.crt
. - Codificación base64 doble del contenido del certificado de CA.
- Linux:
base64 -w 0 ca.crt | base64 -w 0
- Windows: https://www.base64encode.org/.
- Linux:
- Cree un archivo YAML de definición de secreto de Kubernetes con el siguiente contenido.
#additional-ca-1.yaml apiVersion: v1 data: additional-ca-1: TFMwdExTMUNSGlSzZ3Jaa...VVNVWkpRMEMwdExTMHRDZz09 kind: Secret metadata: name: cluster01-user-trusted-ca-secret namespace: tkgs-cluster-ns type: Opaque
Donde:- El valor de la asignación de
data
del secreto es una cadena definida por el usuario que es el nombre del certificado de CA (additional-ca-1
en este ejemplo) cuyo valor es un certificado con codificación base64 doble. - En la sección
metadata
, asigne el nombreCLUSTER-NAME-user-trusted-ca-secret
al secreto, donde CLUSTER-NAME es el nombre del clúster. Este secreto se debe crear en el mismo espacio de nombres de vSphere que el clúster.
- El valor de la asignación de
- Cree el secreto de Kubernetes de forma declarativa.
kubectl apply -f additional-ca-1.yaml
- Compruebe la creación del secreto.
kubeclt get secret -n tkgs-cluster-ns cluster01-user-trusted-ca-secret NAME TYPE DATA AGE cluster01-user-trusted-ca-secret Opaque 12 2d22h
- Incluya la variable
trust
en la especificación del clúster que hace referencia el nombre de la asignación de datos del secreto, que en este ejemplo esadditional-ca-1
.#cluster-with-trusted-private-reg-cert.yaml apiVersion: cluster.x-k8s.io/v1beta1 kind: Cluster metadata: name: cluster01 namespace: tkgs-cluster-ns spec: clusterNetwork: services: cidrBlocks: ["198.52.100.0/12"] pods: cidrBlocks: ["192.101.2.0/16"] serviceDomain: "cluster.local" topology: class: tanzukubernetescluster version: v1.26.5+vmware.2-fips.1-tkg.1 controlPlane: replicas: 3 workers: machineDeployments: - class: node-pool name: node-pool-01 replicas: 3 variables: - name: vmClass value: guaranteed-medium - name: storageClass value: tkgs-storage-profile - name: defaultStorageClass value: tkgs-storage-profile - name: trust value: additionalTrustedCAs: - name: additional-ca-1
- Para rotar el certificado, cree un nuevo secreto y edite la especificación del clúster con el valor adecuado. Esto activará una actualización gradual del clúster.
Nota: El sistema no supervisa los cambios en
CLUSTER-NAME-user-trusted-ca-secret
. Si cambia el valor de asignación dedata
, estos cambios no se verán reflejados en el clúster. Deberá crear un nuevo secreto y su asignación de datosname
entrust.additionalTrustCAs
.