可以使用嵌入式 Harbor 注册表 服务作为部署到由 Tanzu Kubernetes Grid 服务 置备的 Tanzu Kubernetes 集群的映像的专用容器注册表。

vSphere with Tanzu 嵌入了 Harbor 注册表 实例,该实例可在 主管集群 上启用,并用于将基于容器的工作负载部署到 Tanzu Kubernetes 集群。

主管集群 上启用嵌入式 Harbor 注册表 后,Tanzu Kubernetes Grid 服务 会将注册表实例的根 CA 证书安装到 Tanzu Kubernetes 集群节点上。此证书安装在新集群和现有集群上(通过协调循环)。之后,可以通过在工作负载 YAML 中指定专用注册表来在集群上运行映像。

工作流

可以使用以下工作流从 Tanzu Kubernetes 集群节点安全地访问专用注册表并提取容器映像。
步骤 操作 说明
0 查看将嵌入式 Harbor 注册表与 Tanzu Kubernetes 集群结合使用的工作流。 请参见对 vSphere with Tanzu 工作负载使用容器注册表
1 在主管集群上启用嵌入式 Harbor 注册表。 请参见在主管集群上启用嵌入式 Harbor 注册表
2 为每个集群的 kubeconfig 配置注册表服务密钥。 请参见以下说明:为嵌入式 Harbor 注册表配置包含映像提取密钥的 Tanzu Kubernetes 集群。
3 配置工作负载 YAML 以指定专用容器注册表。 请参见以下说明:为嵌入式 Harbor 注册表配置包含映像提取密钥的 Tanzu Kubernetes 集群。
4 要将映像推送到嵌入式 Harbor 注册表,请配置 Docker 客户端并安装 vSphere Docker Credential Helper。 请参见使用嵌入式 Harbor 注册表 证书配置 Docker 客户端将映像推送到嵌入式 Harbor 注册表

为嵌入式 Harbor 注册表 配置包含映像提取密钥的 Tanzu Kubernetes 集群

使用映像提取密钥配置 kubeconfig,以将 Tanzu Kubernetes 集群连接到专用容器注册表(嵌入式 Harbor 注册表 或外部专用注册表)。
  1. 连接到 主管集群。请参见以 vCenter Single Sign-On 用户的身份连接到 主管集群
  2. 将上下文切换到置备了目标 Tanzu Kubernetes 集群的 vSphere 命名空间
    kubectl config use-context tkgs-cluster-ns
  3. 获取 vSphere 命名空间 的映像提取密钥,并将其存储在一个文件中。
    kubectl get secret -n <vsphere-namespace> <vsphere-namespace>-default-image-pull-secret -o yaml > <path>/image-pull-secret.yaml
    例如:
    kubectl get secret -n tkgs-cluster-ns tkgs-cluster-ns-default-image-pull-secret -o yaml > tanzu/image-pull-secret.yaml
  4. 使用文本编辑器打开 image-pull-secret.yaml。完成后,至少进行所需的更改并保存文件。
    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
    
    • 必需:更改 namespace 的值,使其与集群中相应的 Kubernetes 命名空间匹配,例如 default
      注: 要配置映像提取密钥,请指定 Kubernetes 命名空间。如果 Tanzu Kubernetes 集群已存在,请将上下文切换到该集群,并运行 kubectl get namespaces 以列出可用的 Kubernetes 命名空间。如有必要,请先创建目标命名空间,然后再继续。如果 Tanzu Kubernetes 集群不存在,则可以使用 default 命名空间。
    • 可选:将 name 的值更改为有意义的内容,如 harbor-registry-secretprivate-registry-secret
  5. 创建可用于访问 Tanzu Kubernetes 集群的 kubeconfig 文件。
    kubectl get secret -n <vsphere-namespace> <cluster-name>-kubeconfig -o jsonpath='{.data.value}' | base64 -d > <path>/cluster-kubeconfig
    
    <vsphere-namespace> 替换为置备了目标 Tanzu Kubernetes 集群的 vSphere 命名空间 的名称。将 <cluster-name> 替换为 Tanzu Kubernetes 集群的名称。
    kubectl get secret -n tkgs-cluster-ns tkgs-cluster-5-kubeconfig -o jsonpath='{.data.value}' | base64 -d > tanzu/cluster-kubeconfig
  6. Tanzu Kubernetes 集群中创建注册表服务密钥。引用您在本地保存和更新的映像提取密钥文件。
    kubectl --kubeconfig=<path>/cluster-kubeconfig apply -f <path>/image-pull-secret.yaml
    例如:
    kubectl --kubeconfig=tanzu/cluster-kubeconfig apply -f tanzu/image-pull-secret.yaml
    您应该会看到注册表服务密钥已成功创建。
    secret/harbor-registry-secret created

配置 Tanzu Kubernetes 工作负载以从专用容器注册表提取映像

要从专用容器注册表提取用于 Tanzu Kubernetes 集群工作负载的映像,请使用专用注册表详细信息配置工作负载 YAML。

此过程可用于从专用容器注册表或嵌入式 Harbor 注册表 提取映像。在本示例中,我们将创建一个 Pod 规范,该规范将使用存储在嵌入式 Harbor 注册表 中的映像,并利用之前配置的映像提取密钥。
  1. 使用有关专用注册表的详细信息创建示例 Pod 规范。
    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>
    • <workload-name> 替换为 pod 工作负载的名称。
    • <kubernetes-namespace> 替换为将在其中创建 Pod 的集群中的 Kubernetes 命名空间。此命名空间必须是 Tanzu Kubernetes 集群中存储了注册表服务映像提取密钥的 Kubernetes 命名空间(如默认命名空间)。
    • <Registry-IP-Address> 替换为在 主管集群 上运行的嵌入式 Harbor 注册表 实例的 IP 地址。
    • <vsphere-namespace> 替换为置备了目标 Tanzu KubernetesvSphere 命名空间
    • <image-name> 替换为您选择的映像名称。
    • <version> 替换为相应的映像版本,例如“最新版本”。
    • <registry-secret-name> 替换为您之前创建的注册表服务映像提取密钥的名称。
  2. 根据您定义的 Pod 规范在 Tanzu Kubernetes 集群中创建工作负载。
    kubectl --kubeconfig=<path>/cluster-kubeconfig apply -f <pod.yaml>

    应使用从注册表中提取的映像创建 Pod。