可以使用嵌入式 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 注册表 或外部专用注册表)。
- 连接到 主管集群。请参见以 vCenter Single Sign-On 用户的身份连接到 主管集群。
- 将上下文切换到置备了目标 Tanzu Kubernetes 集群的 vSphere 命名空间。
kubectl config use-context tkgs-cluster-ns
- 获取 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
- 使用文本编辑器打开
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-secret 或 private-registry-secret。
- 必需:更改
- 创建可用于访问 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
- 在 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 注册表 中的映像,并利用之前配置的映像提取密钥。
- 使用有关专用注册表的详细信息创建示例 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 Kubernetes 的 vSphere 命名空间。
- 将
<image-name>
替换为您选择的映像名称。 - 将
<version>
替换为相应的映像版本,例如“最新版本”。 - 将
<registry-secret-name>
替换为您之前创建的注册表服务映像提取密钥的名称。
- 将
- 根据您定义的 Pod 规范在 Tanzu Kubernetes 集群中创建工作负载。
kubectl --kubeconfig=<path>/cluster-kubeconfig apply -f <pod.yaml>
应使用从注册表中提取的映像创建 Pod。