要将 TKG 服务 集群与专用容器注册表集成,请参阅本主题。

专用容器注册表用例

容器注册表为 Kubernetes 部署提供了一项关键功能,可用作存储和共享容器映像的集中式存储库。最常用的公共容器注册表是 Docker Hub。有许多私有容器注册表产品。VMware Harbor 主管 附带的开源、云原生、专用容器注册表。

专用容器注册表集成

要将专用注册表与 TKG 服务 集群集成,请为集群配置一个或多个自签名 CA 证书以通过 HTTPS 提供专用注册表内容。为此,请在集群规范中包括具有 additionalTrustedCAs 值的 trust 字段。您可以定义 TKGS 集群应信任的任意数量的自签名 CA 证书。利用此功能,可以轻松定义证书列表,并更新需要轮换的那些证书。

您可以在最初创建集群时配置专用注册表证书,也可以更新现有集群并提供专用注册表证书。要编辑现有集群并添加专用注册表证书,请使用 kubectl edit 方法。请参见为 Kubectl 配置文本编辑器

请注意,trust.additionalTrustedCAs 字段的实施在用于置备 TKGS 集群的受支持 API 之间略有不同。有关详细信息,请参见v1alpha3 API Trust 字段v1beta1 API Trust 变量

v1alpha3 API 示例

以下示例说明了如何使用 CA 证书将使用 v1alpha3 API 置备的 TKG 服务 集群与专用容器注册表集成。

使用 TanzuKubernetesCluster v1alpha3 APItrust.additionalTrustedCAs 字段包括一个或多个名称-数据对,每一对都可以包含一个 TLS 证书用于专用注册表。
表 1. v1alpha3 API Trust 字段
字段 描述
trust 部分标记。不接受任何数据。
additionalTrustedCAs 部分标记。包括一系列证书,以及每个证书的 namedata 字段。
name 用户定义的 CA 证书名称。
data 采用双 base64 编码的 PEM 格式的 CA 证书 (ca.crt) 的内容。
注: v1alpha3 API 要求证书内容采用单 base64 编码。如果内容未采用单 base6 编码,则无法处理生成的 PEM 文件。
可以按照以下过程,使用 Harbor 注册表证书将 Harbor 与 v1alpha3 API 集群集成。
  1. 从 Harbor Web 界面的项目 > 存储库屏幕下载 Harbor 注册表证书

    ca.crt 形式下载 CA 证书文件。

  2. 对 CA 证书的内容进行单 base64 编码。
  3. 在集群规范中包含 trust.additionalTrustedCAs 字段,并填充 namedata 值。
    #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==
  4. 要轮换证书,对集群规范执行 kubectl edit 并更新 trust.additionalTrustedCAs.data 值,然后启动滚动更新。

v1beta1 API 示例

以下示例介绍了如何使用 CA 证书将使用 v1beta1 API 置备的 TKG 服务 集群与专用容器注册表集成。

要将专用容器注册表与使用 集群 v1beta1 API 置备的 TKGS 集群集成,请使用 trust 变量并填充包含专用注册表证书的 Kubernetes 密钥。
表 2. v1beta1 API Trust 变量
字段 描述
trust 部分标记。不接受任何数据。
additionalTrustedCAs 部分标记。包括一系列证书,以及每个证书的名称。
name Kubernetes 密钥中 data 映射字段的用户定义名称,该字段包含采用双 base64 编码的 PEM 格式的 CA 证书。
注: v1beta1 API 要求证书内容采用双 base64 编码。如果内容未采用双 base6 编码,则无法处理生成的 PEM 文件。
可以按照以下过程,使用 Harbor 注册表证书将 Harbor 与 v1beta1 API 集群集成。
  1. 从 Harbor Web 界面的项目 > 存储库屏幕下载 Harbor 注册表证书

    ca.crt 形式下载 CA 证书文件。

  2. 对 CA 证书的内容进行双 base64 编码。
  3. 使用以下内容创建 Kubernetes 密钥定义 YAML 文件。
    #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
    其中:
    • 密钥中 data 映射的值是用户定义的字符串,为 CA 证书的名称(在本示例中为 additional-ca-1),其值为双 base64 编码的证书。
    • metadata 部分中,将密钥命名为 CLUSTER-NAME-user-trusted-ca-secret,其中 CLUSTER-NAME 是集群的名称。必须在集群所在的同一 vSphere 命名空间 中创建此密钥。
  4. 以声明方式创建 Kubernetes 密钥。
    kubectl apply -f additional-ca-1.yaml
  5. 验证密钥创建。
    kubeclt get secret -n tkgs-cluster-ns cluster01-user-trusted-ca-secret
    NAME                                             TYPE     DATA   AGE
    cluster01-user-trusted-ca-secret                 Opaque   12     2d22h
    
  6. trust 变量包含在集群规范中,用于引用此密钥的数据映射的名称(在此示例中为 additional-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
  7. 要轮换证书,请创建新密钥,并使用相应的值编辑集群规范。这将触发对集群进行滚动更新。
    注: 系统不监控对 CLUSTER-NAME-user-trusted-ca-secret 所做的更改。如果 data 映射值发生更改,则这些更改不会反映在集群中。您需要创建新密钥以及 nametrust.additionalTrustCAs 的数据映射。