在创建TMC集群时,嵌入Harbor证书

专为不注意的人准备的小窍门。
在使用Tanzu Mission Control(TMC)创建工作负载集群时,可以传递镜像注册表的证书。
这样一来,就可以从集群部署后立即拉取Private Harbor的镜像了。

验证环境

这次我们是在以下地方进行了试验。

    • Tanzu Mission ControlにManagement Cluster(v2.2)は登録済み

 

    • Private Harborを自己署名証明書を使って構築済み

 

    Private HarborのPublicリポジトリにnginxのイメージをpush済み

也许只有在2.2版本之后,TKG的注册表添加功能才能正常运行。

步骤

登录到TMC的用户界面,选择左侧边栏的Clusters->ADD CLUSTER->Create Tanzu Kubernetes Grid cluster,选择要使用的管理集群,然后点击CONTINUE TO CREATE CLUSTER。
转到创建集群页面后,按照通常的流程填写6.配置节点池。
在7.高级设置中,点击Variable name可以看到各种设置选项。
聪明的人会注意到,在kind: Cluster的spec.topology.variables中指定了参数。
在这里,选择additionalImageRegistries,将caCert设置为使用base64编码的镜像存储库证书(cat ca.crt | base64 -w0),将主机设置为镜像存储库的FQDN。

1692947823759.png

确认行动

获取集群的kubeconfig并在集群上启动Pod。

$ kubectl run --image harbor.10.41.79.186.sslip.io/library/nginx nginx
pod/nginx created
$ kubectl get pod
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          4s

确认一下证书是否正确应用到了节点上,但启动过程没有问题。

ssh -l capv 10.220.145.254

可以看出,证书被放置在containerd配置文件的目录中。

$ ls -l /etc/containerd/
total 8
-rw-r--r-- 1 root root  661 Aug 25 07:25 config.toml
-rw-r--r-- 1 root root 1156 Aug 25 07:25 harbor.10.41.79.186.sslip.io.crt

另外,查看containerd的配置文件时,我们还可以看到它设置为使用指定镜像注册表的证书。

$ cat /etc/containerd/config.toml
:(省略)
[plugins."io.containerd.grpc.v1.cri".registry.configs."harbor.10.41.79.186.sslip.io".tls]
  ca_file = "/etc/containerd/harbor.10.41.79.186.sslip.io.crt"

此外,如果在没有正确证明的簇中执行同样的操作,将会出现以下类似的错误。

$ kubectl run --image harbor.10.41.79.186.sslip.io/library/nginx nginx
pod/nginx created
$ kubectl describe pod nginx
:(省略
  Normal   Pulling    2s    kubelet            Pulling image "harbor.10.41.79.186.sslip.io/library/nginx"
  Warning  Failed     1s    kubelet            Failed to pull image "harbor.10.41.79.186.sslip.io/library/nginx": rpc error: code = Unknown desc = failed to pull and unpack image "harbor.10.41.79.186.sslip.io/library/nginx:latest": failed to resolve reference "harbor.10.41.79.186.sslip.io/library/nginx:latest": failed to do request: Head "https://harbor.10.41.79.186.sslip.io/v2/library/nginx/manifests/latest": x509: certificate signed by unknown authority
  Warning  Failed     1s    kubelet            Error: ErrImagePull

总结

在TMC中,创建集群时很容易传递证书,就像这样。
此外,我也确认可以在构建集群时设置spec.topology.variables的值。
根据使用方法,似乎可以不仅添加证书,还可以添加kube-apiserver的参数和featureGate的设置等。

广告
将在 10 秒后关闭
bannerAds