KubeSphere 如何集成基于 HTTPS 的 Harbor 仓库

  • ​​1.快速部署 Harbor v2.3.1 https 访问​​
  • ​​2.KubeSphere 对接镜像仓库-docker registry​​
  • ​​3. 承上启下​​
  • ​​4. KubeSphere 对接Harbor​​
  • ​​4.1.NodeLocal DNSCache​​
  • ​​4.2 将nodelocaldns解析都转发给 coredns​​
  • ​​4.3 在coredns中添加主机记录​​
  • ​​4.4 x509​​
  • ​​4.4.1 通过 configmap 加载 CA 证书​​
  • ​​4.5 验证​​


​Configure HTTPS Access to Harbor ​


参考官方文档 [https://kubesphere.com.cn/docs/project-user-guide/configuration/image-registry/#使用镜像仓库) 实操记实

1.快速部署 Harbor v2.3.1 https 访问

​​请查阅,快速部署 Harbor v2.3.1 https 访问​​

2.KubeSphere 对接镜像仓库-docker registry

​​KubeSphere 对接镜像仓库-docker registry​​

3. 承上启下

上面两篇文章讲了如何部署https harbor和对接 http的 harbor;接下来详细介绍一下,如何添加基于 https 的harbor 镜像仓库对接使用说明。

4. KubeSphere 对接Harbor

因为 KubeSphere 无法直接解析 harbor 域名,需要在 coredns 添加解析记录,否则会报 no such host

4.1.NodeLocal DNSCache

NodeLocal DNSCache 通过在集群上运行一个dnsCache daemonset来提高clusterDNS性能和可靠性。相比于纯coredns方案,nodelocaldns + coredns方案能够大幅降低DNS查询timeout的频次,提升服务稳定性。

nodelocaldns通过添加iptables规则能够接收节点上所有发往xxx.xxx.xx.xx的dns查询请求,把针对集群内部域名查询请求路由到coredns;把集群外部域名请求直接通过host网络发往集群外部dns服务器。

4.2 将nodelocaldns解析都转发给 coredns

#forward ./etc/resolv.conf指向coredns service ip
#search coredns service ip
ubuntu@master1:~$ kubectl get svc coredns -n kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
coredns ClusterIP 10.233.0.3 <none> 53/UDP,53/TCP,9153/TCP 28d
#修改nodelocaldns的配置configmap的值
kubectl edit cm nodelocaldns -n kube-system
# 将 forward ./etc/resolv.conf 调整为:forward . 10.233.0.3
apiVersion: v1
data:
Corefile: |
cluster.local:53 {
errors
cache {
success 9984 30
denial 9984 5
}
reload
loop
bind 169.254.25.10
forward . 10.233.0.3 {
force_tcp
}
prometheus :9253
health 169.254.25.10:9254
}
...
# 保存、重启、或者手动重启,效果一样

KubeSphere 如何集成基于 HTTPS 的 Harbor 仓库_容器

4.3 在coredns中添加主机记录

#修改 coredns configmap 文件,添加主机记录
kubectl edit cm coredns -n kube-system

....
}
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
ttl 30
}
hosts {
192.168.100.2 dockerhub.kubekey.local
fallthrough
}
prometheus :9153
....
# 保存或者重启coredns一下进行验证

KubeSphere 如何集成基于 HTTPS 的 Harbor 仓库_edn_02

如果此时添加harbor对接信息,会提示 证书问题, x509的错误提示

Get"https://dockerhub.kubekey.local/v2/":x509:certificate signed by unknown authority

4.4 x509

在kubepshere中的 ks-apiserver 中添加镜像仓库 ca 证书

4.4.1 通过 configmap 加载 CA 证书

查看CA证书的位置,在Harbor部署时,查看证书生成的位置及值

#目录位置: ls /etc/docker/certs.d/
ubuntu@master1:~$ cat /etc/docker/certs.d/dockerhub.kubekey.local/ca.crt
-----BEGIN CERTIFICATE-----
MIIDATCCAemgAwIBAgIBADANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDEwtyZWdp
c3RyeS1jYTAeFw0yMjA0MjExNjUzNTJaFw0zMjA0MTgxNjUzNTJaMBYxFDASBgNV
BAMTC3JlZ2lzdHJ5LWNhMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
vs0k1cS3S4L9tvTvJomlMwNN8eGSk8hujGKm6SQHAYicFsNmfYevfthJsufuikIq
ggxwyL9nExr470l4hN31PN/ztIKZh/57IKF6XZrF5Ld3fBxOvVGSTarZraIkxkPe
/N5HfJdAWh5CTKtdsOpal3CmP+6tbRQ6qQN5D9lO97Tid79W8a58jI7FHyeYS08D
VlBjDCip81mI4YsgMaXmatS0HjtLtCvQNsL5Py2KKAhHb+Rd0iepICUT2uUwR1Cu
RpO+FkiAxM8WXF/6IndiIsoC2XCh6pELadcKCNNy5IREC/+JbjveNZOuYU4KPJn5
TYZxzalJ8nWRHpi6neFHAQIDAQABo1owWDAOBgNVHQ8BAf8EBAMCAqQwDwYDVR0T
AQH/BAUwAwEB/zAdBgNVHQ4EFgQUtcd+vBgIbcmB8O7ZeSBwFOCPj/QwFgYDVR0R
BA8wDYILcmVnaXN0cnktY2EwDQYJKoZIhvcNAQELBQADggEBABxAVx3Wkfic/SWY
Z1T0kv+zq8NW1YyHDw13mRwcjV+lRI0/WtANEBAbAejmZJkhhz7uc/N9egXF6cOY
PLoxvLXQJGxQKfBqrGkFhAlFt4FWJm0g7fXq/a6Fo/EStRmW9Oio0dFJHQ/F6Lon
DK/1bx0s27JJqBmU4WnmGF1U2prYuJ3/C8mwxWb49K+z1s1sDQQOCp/jt8gabc2R
GAZgcYhIj+HUXAEl14+GhpoLqJbJ5ngVLxz08YDMTGp1pQ8uYeE1m29yTOThMGrC
owVM1fSSHs5UtKQ2/tVcxi5Mf+WUWZr2D2km0dI9BJyXwtQwGKhp3lwJX5e0NTZi
+6a/23U=
-----END CERTIFICATE-----
#界面创建configmap:工作台>企业空间>System-workspace>项目>kubesphere-system>配置>配置字典,新建harbor4shl-ca

KubeSphere 如何集成基于 HTTPS 的 Harbor 仓库_原力计划_03

挂载 configmap harbor4shl-ca


编辑 ks-apiserver deployment 文件,进行 configmap 的挂载
KubeSphere 如何集成基于 HTTPS 的 Harbor 仓库_原力计划_04
KubeSphere 如何集成基于 HTTPS 的 Harbor 仓库_原力计划_05


保存更新

4.5 验证

KubeSphere 如何集成基于 HTTPS 的 Harbor 仓库_原力计划_06

KubeSphere 如何集成基于 HTTPS 的 Harbor 仓库_云原生_07

KubeSphere 如何集成基于 HTTPS 的 Harbor 仓库_云原生_08