当前位置:   article > 正文

k8s 安装harbor_kubernetes 安装harbor

kubernetes 安装harbor

前言
文章篇幅较长,请详细阅读,不要漏掉每一个注释,每一个细节。
文章中用到的harbor存储是hostpath,service的类型是ingress。根据harbor官网提示,需要提前创建pv和pvc,既然选择了hostpath,那么就需要将pod固定到某一个node上面,本文所有的资源副本都是1,harbor的所有pod放在同一个namespace,并且需要将namespace固定到某个node上,具体步骤见正文。

一.环境准备

2.创建namespace
cat namespace-harbor.yaml

  1. apiVersion: v1
  2. kind: Namespace
  3. metadata:
  4.   name: harbor

kubectl apply -f namespace-harbor.yaml



3.开启准入控制器

如果是多master,所有master都要修改
–enable-admission-plugins 添加 PodNodeSelector

vim /etc/kubernetes/manifests/kube-apiserver.yaml

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4.   annotations:
  5.     kubeadm.kubernetes.io/kube-apiserver.advertise-address.endpoint: 192.168.0.20:6443
  6.   creationTimestamp: null
  7.   labels:
  8.     component: kube-apiserver
  9.     tier: control-plane
  10.   name: kube-apiserver
  11.   namespace: kube-system
  12. spec:
  13.   containers:
  14.   - command:
  15.     - kube-apiserver
  16.     - --advertise-address=192.168.0.20
  17.     - --allow-privileged=true
  18.     - --authorization-mode=Node,RBAC
  19.     - --client-ca-file=/etc/kubernetes/pki/ca.crt
  20.     - --enable-admission-plugins=NodeRestriction,PodNodeSelector


apiserver pod会自动重启

4.命名空间加注解
kubectl edit ns harbor -o yaml

  1. apiVersion: v1
  2. kind: Namespace
  3. metadata:
  4.   annotations:
  5.     scheduler.alpha.kubernetes.io/node-selector: harbor=env
  6.   name: harbor



5.node打标签
kubectl label node k8s-node3 harbor=env

6.创建pv和pvc
选择hostpath,需要提前准备pv和pvc,官网解释如下:


官网链接:https://goharbor.io/docs/2.7.0/install-config/harbor-ha-helm/

在k8s-node3节点创建目录,建议给/data下单独挂一块存储盘

df -h

mkdir -pv /data/harbor/{chartmuseum,database,jobservice,redis,registry,scandata,trivy}
mkdir: created directory ‘harbor’
mkdir: created directory ‘harbor/chartmuseum’
mkdir: created directory ‘harbor/database’
mkdir: created directory ‘harbor/jobservice’
mkdir: created directory ‘harbor/redis’
mkdir: created directory ‘harbor/registry’
mkdir: created directory ‘harbor/scandata’
mkdir: created directory ‘harbor/trivy’
chmod 777 -R /data/harbor   ##必须要赋权,不然pod启动会有问题

创建pv和pvc

cat harbor-pv.yaml

  1. apiVersion: v1
  2. kind: PersistentVolume
  3. metadata:
  4. name: "harbor-registry-pv"
  5. labels:
  6. name: harbor-registry-pv
  7. release: stable
  8. spec:
  9. capacity:
  10. storage: 5Gi
  11. accessModes:
  12. - ReadWriteOnce
  13. persistentVolumeReclaimPolicy: Retain
  14. hostPath:
  15. path: /data/harbor/registry
  16. type: DirectoryOrCreate
  17. ---
  18. apiVersion: v1
  19. kind: PersistentVolume
  20. metadata:
  21. name: "harbor-chartmuseum-pv"
  22. labels:
  23. name: harbor-chartmuseum-pv
  24. release: stable
  25. spec:
  26. capacity:
  27. storage: 5Gi
  28. accessModes:
  29. - ReadWriteOnce
  30. persistentVolumeReclaimPolicy: Retain
  31. hostPath:
  32. path: /data/harbor/chartmuseum
  33. type: DirectoryOrCreate
  34. ---
  35. apiVersion: v1
  36. kind: PersistentVolume
  37. metadata:
  38. name: "harbor-jobservice-pv"
  39. labels:
  40. name: harbor-jobservice-pv
  41. release: stable
  42. spec:
  43. capacity:
  44. storage: 5Gi
  45. accessModes:
  46. - ReadWriteOnce
  47. persistentVolumeReclaimPolicy: Retain
  48. hostPath:
  49. path: /data/harbor/jobservice
  50. type: DirectoryOrCreate
  51. ---
  52. apiVersion: v1
  53. kind: PersistentVolume
  54. metadata:
  55. name: "harbor-database-pv"
  56. labels:
  57. name: harbor-database-pv
  58. release: stable
  59. spec:
  60. capacity:
  61. storage: 5Gi
  62. accessModes:
  63. - ReadWriteOnce
  64. persistentVolumeReclaimPolicy: Retain
  65. hostPath:
  66. path: /data/harbor/database
  67. type: DirectoryOrCreate
  68. ---
  69. apiVersion: v1
  70. kind: PersistentVolume
  71. metadata:
  72. name: "harbor-redis-pv"
  73. labels:
  74. name: harbor-redis-pv
  75. release: stable
  76. spec:
  77. capacity:
  78. storage: 5Gi
  79. accessModes:
  80. - ReadWriteOnce
  81. persistentVolumeReclaimPolicy: Retain
  82. hostPath:
  83. path: /data/harbor/redis
  84. type: DirectoryOrCreate
  85. ---
  86. apiVersion: v1
  87. kind: PersistentVolume
  88. metadata:
  89. name: "harbor-trivy-pv"
  90. labels:
  91. name: harbor-trivy-pv
  92. release: stable
  93. spec:
  94. capacity:
  95. storage: 5Gi
  96. accessModes:
  97. - ReadWriteOnce
  98. persistentVolumeReclaimPolicy: Retain
  99. hostPath:
  100. path: /data/harbor/trivy
  101. type: DirectoryOrCreate
  102. ---
  103. apiVersion: v1
  104. kind: PersistentVolume
  105. metadata:
  106. name: "harbor-scandata-pv"
  107. labels:
  108. name: harbor-scandata-pv
  109. release: stable
  110. spec:
  111. capacity:
  112. storage: 5Gi
  113. accessModes:
  114. - ReadWriteOnce
  115. persistentVolumeReclaimPolicy: Retain
  116. hostPath:
  117. path: /data/harbor/scandata
  118. type: DirectoryOrCreate
  119. ---
  120. apiVersion: v1
  121. kind: PersistentVolumeClaim
  122. metadata:
  123. name: harbor-registry-pvc
  124. namespace: harbor
  125. spec:
  126. accessModes:
  127. - ReadWriteOnce
  128. resources:
  129. requests:
  130. storage: 5Gi
  131. selector:
  132. matchLabels:
  133. name: harbor-registry-pv
  134. release: stable
  135. ---
  136. apiVersion: v1
  137. kind: PersistentVolumeClaim
  138. metadata:
  139. name: harbor-chartmuseum-pvc
  140. namespace: harbor
  141. spec:
  142. accessModes:
  143. - ReadWriteOnce
  144. resources:
  145. requests:
  146. storage: 5Gi
  147. selector:
  148. matchLabels:
  149. name: harbor-chartmuseum-pv
  150. release: stable
  151. ---
  152. apiVersion: v1
  153. kind: PersistentVolumeClaim
  154. metadata:
  155. name: harbor-jobservice-pvc
  156. namespace: harbor
  157. spec:
  158. accessModes:
  159. - ReadWriteOnce
  160. resources:
  161. requests:
  162. storage: 5Gi
  163. selector:
  164. matchLabels:
  165. name: harbor-jobservice-pv
  166. release: stable
  167. ---
  168. apiVersion: v1
  169. kind: PersistentVolumeClaim
  170. metadata:
  171. name: harbor-database-pvc
  172. namespace: harbor
  173. spec:
  174. accessModes:
  175. - ReadWriteOnce
  176. resources:
  177. requests:
  178. storage: 5Gi
  179. selector:
  180. matchLabels:
  181. name: harbor-database-pv
  182. release: stable
  183. ---
  184. apiVersion: v1
  185. kind: PersistentVolumeClaim
  186. metadata:
  187. name: harbor-redis-pvc
  188. namespace: harbor
  189. spec:
  190. accessModes:
  191. - ReadWriteOnce
  192. resources:
  193. requests:
  194. storage: 5Gi
  195. selector:
  196. matchLabels:
  197. name: harbor-redis-pv
  198. release: stable
  199. ---
  200. apiVersion: v1
  201. kind: PersistentVolumeClaim
  202. metadata:
  203. name: harbor-trivy-pvc
  204. namespace: harbor
  205. spec:
  206. accessModes:
  207. - ReadWriteOnce
  208. resources:
  209. requests:
  210. storage: 5Gi
  211. selector:
  212. matchLabels:
  213. name: harbor-trivy-pv
  214. release: stable
  215. ---
  216. apiVersion: v1
  217. kind: PersistentVolumeClaim
  218. metadata:
  219. name: harbor-scandata-pvc
  220. namespace: harbor
  221. spec:
  222. accessModes:
  223. - ReadWriteOnce
  224. resources:
  225. requests:
  226. storage: 5Gi
  227. selector:
  228. matchLabels:
  229. name: harbor-scandata-pv
  230. release: stable
  1. kubectl apply -f harbor-pv.yaml
  2. kubectl get pv,pvc -n harbor
  1. NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                        STORAGECLASS         REASON   AGE
  2. persistentvolume/harbor-chartmuseum-pv                      5Gi        RWO            Retain           Bound    harbor/harbor-chartmuseum-pvc                                              31h
  3. persistentvolume/harbor-database-pv                         5Gi        RWO            Retain           Bound    harbor/harbor-database-pvc                                                 31h
  4. persistentvolume/harbor-jobservice-pv                       5Gi        RWO            Retain           Bound    harbor/harbor-jobservice-pvc                                               31h
  5. persistentvolume/harbor-redis-pv                            5Gi        RWO            Retain           Bound    harbor/harbor-redis-pvc                                                    31h
  6. persistentvolume/harbor-registry-pv                         5Gi        RWO            Retain           Bound    harbor/harbor-registry-pvc                                                 31h
  7. persistentvolume/harbor-scandata-pv                         5Gi        RWO            Retain           Bound    harbor/harbor-scandata-pvc                                                 30h
  8. persistentvolume/harbor-trivy-pv                            5Gi        RWO            Retain           Bound    harbor/harbor-trivy-pvc                                                    31h
  9. NAME                                           STATUS   VOLUME                  CAPACITY   ACCESS MODES   STORAGECLASS   AGE
  10. persistentvolumeclaim/harbor-chartmuseum-pvc   Bound    harbor-chartmuseum-pv   5Gi        RWO                           31h
  11. persistentvolumeclaim/harbor-database-pvc      Bound    harbor-database-pv      5Gi        RWO                           31h
  12. persistentvolumeclaim/harbor-jobservice-pvc    Bound    harbor-jobservice-pv    5Gi        RWO                           31h
  13. persistentvolumeclaim/harbor-redis-pvc         Bound    harbor-redis-pv         5Gi        RWO                           31h
  14. persistentvolumeclaim/harbor-registry-pvc      Bound    harbor-registry-pv      5Gi        RWO                           31h
  15. persistentvolumeclaim/harbor-scandata-pvc      Bound    harbor-scandata-pv      5Gi        RWO                           30h
  16. persistentvolumeclaim/harbor-trivy-pvc         Bound    harbor-trivy-pv         5Gi        RWO                           31h



二.安装harbor
1.添加harbor的helm源

  1. helm repo add harbor https://helm.goharbor.io
  2. helm search repo
  3. helm pull harbor/harbor
  4. tar zxf harbor-1.11.0.tgz
  5. cd harbor/
  6. ls
cert  Chart.yaml  conf  LICENSE  README.md  templates  values.yaml




2.前方高能,修改values.yaml
这里用默认类型 ingress,https协议,如果想用http协议,那么需要删除掉“expose.ingress.annotations”里面的“ssl-redirect”相关注解

vim values.yaml

  1. expose:
  2.   # Set how to expose the service. Set the type as "ingress", "clusterIP", "nodePort" or "loadBalancer"
  3.   # and fill the information in the corresponding section
  4.   type: ingress
  5.   tls:
  6.     # Enable TLS or not.
  7.     # Delete the "ssl-redirect" annotations in "expose.ingress.annotations" when TLS is disabled and "expose.type" is "ingress"
  8.     # Note: if the "expose.type" is "ingress" and TLS is disabled,
  9.     # the port must be included in the command when pulling/pushing images.
  10.     # Refer to https://github.com/goharbor/harbor/issues/5291 for details.
  11.     enabled: true  
  12.     # The source of the tls certificate. Set as "auto", "secret"
  13.     # or "none" and fill the information in the corresponding section
  14.     # 1) auto: generate the tls certificate automatically
  15.     # 2) secret: read the tls certificate from the specified secret.
  16.     # The tls certificate can be generated manually or by cert manager
  17.     # 3) none: configure no tls certificate for the ingress. If the default
  18.     # tls certificate is configured in the ingress controller, choose this option
  19.     certSource: auto


修改持久化配置,将pvc name添加在existingClaim后面

  1. persistence:
  2.   enabled: true
  3.   # Setting it to "keep" to avoid removing PVCs during a helm delete
  4.   # operation. Leaving it empty will delete PVCs after the chart deleted
  5.   # (this does not apply for PVCs that are created for internal database
  6.   # and redis components, i.e. they are never deleted automatically)
  7.   resourcePolicy: "keep"
  8.   persistentVolumeClaim:
  9.     registry:
  10.       # Use the existing PVC which must be created manually before bound,
  11.       # and specify the "subPath" if the PVC is shared with other components
  12.       existingClaim: "harbor-registry-pvc"
  13.       # Specify the "storageClass" used to provision the volume. Or the default
  14.       # StorageClass will be used (the default).
  15.       # Set it to "-" to disable dynamic provisioning
  16.       storageClass: ""
  17.       subPath: ""
  18.       accessMode: ReadWriteOnce
  19.       size: 5Gi
  20.       annotations: {}
  21.     chartmuseum:
  22.       existingClaim: "harbor-chartmuseum-pvc"
  23.       storageClass: ""
  24.       subPath: ""
  25.       accessMode: ReadWriteOnce
  26.       size: 5Gi
  27.       annotations: {}
  28.     jobservice:
  29.       jobLog:
  30.         existingClaim: "harbor-jobservice-pvc"
  31.         storageClass: ""
  32.         subPath: ""
  33.         accessMode: ReadWriteOnce
  34.         size: 5Gi
  35.         annotations: {}
  36.       scanDataExports:
  37.         existingClaim: "harbor-scandata-pvc"
  38.         storageClass: ""
  39.         subPath: ""
  40.         accessMode: ReadWriteOnce
  41.         size: 5Gi
  42.         annotations: {}
  43.     # If external database is used, the following settings for database will
  44.     # be ignored
  45.     database:
  46.       existingClaim: "harbor-database-pvc"
  47.       storageClass: ""
  48.       subPath: ""
  49.       accessMode: ReadWriteOnce
  50.       size: 5Gi
  51.       annotations: {}
  52.     # If external Redis is used, the following settings for Redis will
  53.     # be ignored
  54.     redis:
  55.       existingClaim: "harbor-redis-pvc"
  56.       storageClass: ""
  57.       subPath: ""
  58.       accessMode: ReadWriteOnce
  59.       size: 5Gi
  60.       annotations: {}
  61.     trivy:
  62.       existingClaim: "harbor-trivy-pvc"
  63.       storageClass: ""
  64.       subPath: ""
  65.       accessMode: ReadWriteOnce
  66.       size: 5Gi
  67.       annotations: {}


3.helm安装harbor

helm install harbor . -f values.yaml -n harbor

删除命令 

helm uninstall harbor -n harbor


 

kubectl get pod -n harbor -o wide


NAME                                    READY   STATUS    RESTARTS   AGE     IP               NODE        NOMINATED NODE   READINESS GATES
harbor-chartmuseum-7b74f8b585-qcp89     1/1     Running   2          4h39m   10.244.107.231   k8s-node3   <none>           <none>
harbor-core-7fc48678c8-qcdqk            1/1     Running   2          4h39m   10.244.107.233   k8s-node3   <none>           <none>
harbor-database-0                       1/1     Running   2          4h39m   10.244.107.236   k8s-node3   <none>           <none>
harbor-jobservice-8486bb4bcb-2gjtp      1/1     Running   9          4h39m   10.244.107.237   k8s-node3   <none>           <none>
harbor-notary-server-7f7bf8f6d-zphpg    1/1     Running   2          4h39m   10.244.107.244   k8s-node3   <none>           <none>
harbor-notary-signer-5f9df848b7-skpxj   1/1     Running   2          4h39m   10.244.107.248   k8s-node3   <none>           <none>
harbor-portal-748c6db9c6-qw97j          1/1     Running   2          4h39m   10.244.107.243   k8s-node3   <none>           <none>
harbor-redis-0                          1/1     Running   2          4h39m   10.244.107.228   k8s-node3   <none>           <none>
harbor-registry-6777c99d8d-cb9rj        2/2     Running   4          4h39m   10.244.107.235   k8s-node3   <none>           <none>
harbor-trivy-0                          1/1     Running   2          4h39m   10.244.107.245   k8s-node3   <none>           <none>

4.ingress绑定ingress class

kubectl get ingress -n harbor


NAME                    CLASS    HOSTS                  ADDRESS                     PORTS     AGE
harbor-ingress          <none>   core.harbor.domain     192.168.0.21,192.168.0.22   80, 443   4h55m

kubectl edit ingress harbor-ingress -n harbor


......
spec:
  ingressClassName: nginx            ## k8s-1.20.X添加ingressClassName
  rules:
  - host: core.harbor.domain
    http:
      paths:
......
[root@k8s-master harbor]# kubectl get ingress -n harbor   ##查看添加成功
NAME                    CLASS    HOSTS                  ADDRESS                     PORTS     AGE
harbor-ingress          nginx    core.harbor.domain     192.168.0.21,192.168.0.22   80, 443   4h57m

5.服务器配置证书,不然docker login和docker pull 都会报错
在harbor-ingress 的secret里面找到data下的ca.crt

kubectl get secret harbor-ingress -n harbor -o yaml

  1. apiVersion: v1
  2. data:
  3.   ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURFekNDQWZ1Z0F3SUJBZ0lRY3d4c0NtVmNPV2RpZWJTSVREcU9kakFOQmdrcWhraUc5dzBCQVFzRkFEQVUKTVJJd0VBWURWUVFERXdsb1lYSmliM0l0WTJFd0hoY05Nakl4TWpJNE1EWXdOVE13V2hjTk1qTXhNakk0TURZdwpOVE13V2pBVU1SSXdFQVlEVlFRREV3bG9ZWEppYjNJdFkyRXdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCCkR3QXdnZ0VLQW9JQkFRQ3g0YVBFbkJ5K2xicElsSytyZmlsdndIWkJRMzM1a3lxMThKWHhpcDl1SFQ0VkExUzEKbG45anVtQUR4Smk4QnhWZStmVlBDWW5UeGJoNWJua3pqdm9XekptOTlMRUY5UDJPdW5VZnZCWGt6VFZEK0o1TgpBZjhyMmtqMFRTck5yZVVKL3JwR01mT1V1MFRSSjg2N2g1WHg1aEpBeDNlWlk4LzRFWmZQOVFGRlFsVGRxRDFBCmlkUkRydjFCSGJIajNxVjU3ckI4L3VxMVJ1a2hjQUZodlZXKzMvdmNkelBaS0hjc0c4d3VhNml2ekExK096a1gKTFA2K2wvcnlPektWWG9kU3ZHV1RmVzJpSlFEUjJqSWliR1loSUF3SDIrZlU4MVJrdGNsS050b2hZYW5aYjdOdQpTcTlzOFB1b3Y2V1JDMWpwRUd6cjhtR2hKTEhtcHJMNlRXeDdBZ01CQUFHallUQmZNQTRHQTFVZER3RUIvd1FFCkF3SUNwREFkQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQVFZSUt3WUJCUVVIQXdJd0R3WURWUjBUQVFIL0JBVXcKQXdFQi96QWRCZ05WSFE0RUZnUVVZc2xqdmpDZ3F5R2NRZ1ZWS0s5TnIreU8yWll3RFFZSktvWklodmNOQVFFTApCUUFEZ2dFQkFKd1NkMkFuMmpEdHp6NUIvOEl2UzliamxVN3hLVlR0M1pWWkc0N0R5aFJXTmRpVEs1NFF3dFdhCmtCYUZrV2xTQWJaUk5iOWwyak85NEFMelRCb0ttVU04QTBlZFBQbXdvTFFaZlV2NVp6SCtGM05PenNVT1I5dFIKbnhva3lkSU14WUlpQWp1YThudXRLK0g2TklsRDRiVVA1MVZSNFJsNjBhdHhSWi81OW1HMWw1ZUNVSWtObVJyaQpwY2FQTjBBa3NzR2dCNmpxK3VXMXhPU0l1M21idVl3amdzTEpqWTFkNkNuS1IvQ1RRZnRBKzB2NFNVRTJBTFRGClg0TEFRVXFsM0F2NU8wWkxFQXAzNE5aR0xGNCtnRmJuYi84MmdYTlBuY2IzQkxOR0tKVE5zL0RGTTBkYlgwajcKY3VIMHQvT01oV2YyZ084eTNBMDB6dkIzcTVZSkIwdz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
  4.   tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURVekNDQWp1Z0F3SUJBZ0lSQU9QeW44V1FlOVZOaUlYL21LSGhrSHN3RFFZSktvWklodmNOQVFFTEJRQXcKRkRFU01CQUdBMVVFQXhNSmFHRnlZbTl5TFdOaE1CNFhEVEl5TVRJeU9EQTJNRFV6TUZvWERUSXpNVEl5T0RBMgpNRFV6TUZvd0hURWJNQmtHQTFVRUF4TVNZMjl5WlM1b1lYSmliM0l1Wkc5dFlXbHVNSUlCSWpBTkJna3Foa2lHCjl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF2dno0N0l4d2JUZDBQOFcvWngxUTVYaS9IRWZLajJmRzFlK08KQ0RMb2psSWEvbmErUlpaRzZvSVNIbGt6TVo2cTh3WmhZeTRVRTFCQi9VM1hKK2xuNHNhTkgrVllTQjdDbmFuYQpiWW5DVkp2Y091d1J3LzVaNUJzU1UreE55U0tLd3dGN0hLcDZBdklIc1puaU85aHhMNUVKRjRmbmtHY3BQZlZKCjNQTzdMY3B4ZDBVcEJ0enJyYnBWWTV1eDlmY3ZKSWNFeEJTY3ZmaGxmN3VjR0pYSDBZa0xra3RJUVAveWdRekMKQWMvUG82NDJ6VUJqNE1RWGVaRVQ2WjRxaWtLWnc4VXRGTyttZmZBU3BPT3FmMkpncDJiaU4yR1VqR044MTkxTAo1NU1BUUY3aFBzUWo0Y0k2aEVWczk3VmtXci9ZKzdxN3EyNkZnQ1IxY0p6ZVBQY1puUUlEQVFBQm80R1dNSUdUCk1BNEdBMVVkRHdFQi93UUVBd0lGb0RBZEJnTlZIU1VFRmpBVUJnZ3JCZ0VGQlFjREFRWUlLd1lCQlFVSEF3SXcKREFZRFZSMFRBUUgvQkFJd0FEQWZCZ05WSFNNRUdEQVdnQlJpeVdPK01LQ3JJWnhDQlZVb3IwMnY3STdabGpBegpCZ05WSFJFRUxEQXFnaEpqYjNKbExtaGhjbUp2Y2k1a2IyMWhhVzZDRkc1dmRHRnllUzVvWVhKaWIzSXVaRzl0CllXbHVNQTBHQ1NxR1NJYjNEUUVCQ3dVQUE0SUJBUUJpK3pFdFllS3A3VnRnamo1Vk9PMXUzRERLSmJFaXZYRFYKbG9ZeVRjQzdWRGg3YlF5UmhPVEtja2pJeGd6cFpubjUyczYvSHYxbkQ3MTk0UXFieE0yOGI1OEpxUEtvS0E4aQpWNHEzSE9xUGhlMlRoS1M4ZUt4anl4R0ZRYi8rQ2prdXNlTDV0bjVFbFM1SjBIRU93K2crZjk0WUdMMTFhdkNuCklnazdDbjQwTWovUUg1YTdhaC9lenNad3Y1aFJISHQrc2pyeE5TYWFTcXNjbHQ4bEV2M3VQWFVsdHBrRm1VY2IKc3hOM1lwRDg4d05LWElQSnU5bWpGMnFJUUdUYXBtME04a3lvTGZpMHlrdDlWM1I1cXoybVcwQWx5d3dob0NvMQpTTm9KbUJIOE42bnhqU1JPUzVJS01XU0RhYWtLc1ZVWGhiUjJRQVlyYVkvZ3YrWnhmZEdlCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
  5.   tls.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBdnZ6NDdJeHdiVGQwUDhXL1p4MVE1WGkvSEVmS2oyZkcxZStPQ0RMb2psSWEvbmErClJaWkc2b0lTSGxrek1aNnE4d1poWXk0VUUxQkIvVTNYSitsbjRzYU5IK1ZZU0I3Q25hbmFiWW5DVkp2Y091d1IKdy81WjVCc1NVK3hOeVNLS3d3RjdIS3A2QXZJSHNabmlPOWh4TDVFSkY0Zm5rR2NwUGZWSjNQTzdMY3B4ZDBVcApCdHpycmJwVlk1dXg5ZmN2SkljRXhCU2N2ZmhsZjd1Y0dKWEgwWWtMa2t0SVFQL3lnUXpDQWMvUG82NDJ6VUJqCjRNUVhlWkVUNlo0cWlrS1p3OFV0Rk8rbWZmQVNwT09xZjJKZ3AyYmlOMkdVakdOODE5MUw1NU1BUUY3aFBzUWoKNGNJNmhFVnM5N1ZrV3IvWSs3cTdxMjZGZ0NSMWNKemVQUGNablFJREFRQUJBb0lCQUEyOEVZYXBYdGhyMlg5UQprRUF4R29VMkZzQkk1V2RFdGtiaVVGdUVsYmJPYnNTSDg0ejdqcVFFc0pyZ0hVOWZNcm9CWm5XRWRjc2h4VzBhCjhQTWMxT3k1REtNVGtqSzFpNWRkQktsRjgrU3p4TFcwRGw4QzVxSUIxR0tXcHMxbEg0ZUFqc0x6KzR4RXJZcjMKSHc3Z3ROc1AyaENJSkgzOC9UbEliNFJsUHJ1L0tIV2p1SzJQWWQweFdzdDBtWVZBMytpYW9jWWJXTk1BV3p5cAo0WmR0c1Via2MrU3JPVUIvM2hrNE9iNUtkbUM3RE5aMTZJTnlSNGdpdXliSFI0Wk9JaHh1NGsyenFhVDBoU2J5CjREaUEyNytsczNWcGxETHhmanlKUVQyMEZHVW5jNTllb1pzdzBUeHZSUjM5cEFJQW9IdUhlL0ZCQW1RRnhZSEEKMS9qNUp5RUNnWUVBMnFnVDd4Sms4WFNLcStwenhDSTV4TlpTRVp0OU5WeVFZUUFzM25ubkxhemp0UUUwSGJGeQpWbk9ja1h6ZFd4Wnd5WUtUTktSb0ViSGE3V0NUVmd0T3RrR3VJWCtnenprQTRQaEI1YmhFNmp2bUhzS0laQkkvCmN5Z1lvMENZY0dZTGl5YnpRV0VLTzRPRHg1TlVxZmY2OTVRVVRGek1ORE10eSsvRnozc3lYNVVDZ1lFQTM1c3oKUmZHa0Qzd1lDTSszbWR3VldOZnRjbkNBYmw1YXppM3BWRG4yR2JRNC9GYVZkYVNmT3Z0Vk1oRUZpZkZGS2RzRApSNXJ3SmdXNmJSRUg0V1JOSEQxUzZ2WHc5ZnJJRkZFMnBRa2JZb01iV0tsUlFMNTlSYlRMQnEzQVJnV3Q4MXBYCmJtOXNNeFNBS2NBaVF6dGFxYXFTVDhOQjBHY1U0MjZSK3ZEYTcra0NnWUVBbFVRMlQzZE1KN1Q2VVgvOHhZRGoKMU9iR0liVDIxYTI1OWk0TGMxamVvMFNxTWM5L2gyR3lmeWZ2VXpaZFdpaEltSmVsN0VMcnRHQ281bkdPUXlmMgo5TjZEZytTL241YjNiWnlzUjZqeWlzQ1hTSnBlUjRwWmZFQjhDVDQ0a2twblNQZ3ZDWXU0VTRabE9LSHdJeFBoClpJL1hCNFkxOU5DWFMrZ0VMcTZZWmIwQ2dZRUExVVpsNEVlN2tOMXUyekNzVVQ5K3lPK2pWaTBDQXNOU1h5ZWgKVHFtK0Z3UXorbExuV1g4OE5QaTJhUHVkU2RYcmZ5R2JmamZFNks4OEFuMWxBOUUwVDBRYWkyc3JlcUxKSmIvVQpuQk1Vb0tDbWU2bDdpNEpsWUJBeU9kdU44ZnZHejc4U2Q0NGxLSTljTXZaRWQ5WHNBcnBqdFZwcXNza3ZQa0lmClVMZGNTOGtDZ1lCejZ2QlJqc2VlZnpySXVSRjR5UWorcUhZM2cxYXR2VDBMYlh5MWVvTk5RdW92ZXhoZmduTHoKangyVVB0Z29VMjlrMUpOWWhzMjByWVBhS1NDa2c5ZjNqUk1NNmZOc2M4QWQ5RFNJa3FaeS9rQkI0YjJPMDdKdwo2cVBRZEhyemJDK0Q2VUZhakFJMEFoVVV1WUZXbFRPaW5uLzlEc0p4Ky9CbEZSQzJFZTJtNEE9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=



转码

echo 'LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURFekNDQWZ1Z0F3SUJBZ0lRY3d4c0NtVmNPV2RpZWJTSVREcU9kakFOQmdrcWhraUc5dzBCQVFzRkFEQVUKTVJJd0VBWURWUVFERXdsb1lYSmliM0l0WTJFd0hoY05Nakl4TWpJNE1EWXdOVE13V2hjTk1qTXhNakk0TURZdwpOVE13V2pBVU1SSXdFQVlEVlFRREV3bG9ZWEppYjNJdFkyRXdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCCkR3QXdnZ0VLQW9JQkFRQ3g0YVBFbkJ5K2xicElsSytyZmlsdndIWkJRMzM1a3lxMThKWHhpcDl1SFQ0VkExUzEKbG45anVtQUR4Smk4QnhWZStmVlBDWW5UeGJoNWJua3pqdm9XekptOTlMRUY5UDJPdW5VZnZCWGt6VFZEK0o1TgpBZjhyMmtqMFRTck5yZVVKL3JwR01mT1V1MFRSSjg2N2g1WHg1aEpBeDNlWlk4LzRFWmZQOVFGRlFsVGRxRDFBCmlkUkRydjFCSGJIajNxVjU3ckI4L3VxMVJ1a2hjQUZodlZXKzMvdmNkelBaS0hjc0c4d3VhNml2ekExK096a1gKTFA2K2wvcnlPektWWG9kU3ZHV1RmVzJpSlFEUjJqSWliR1loSUF3SDIrZlU4MVJrdGNsS050b2hZYW5aYjdOdQpTcTlzOFB1b3Y2V1JDMWpwRUd6cjhtR2hKTEhtcHJMNlRXeDdBZ01CQUFHallUQmZNQTRHQTFVZER3RUIvd1FFCkF3SUNwREFkQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQVFZSUt3WUJCUVVIQXdJd0R3WURWUjBUQVFIL0JBVXcKQXdFQi96QWRCZ05WSFE0RUZnUVVZc2xqdmpDZ3F5R2NRZ1ZWS0s5TnIreU8yWll3RFFZSktvWklodmNOQVFFTApCUUFEZ2dFQkFKd1NkMkFuMmpEdHp6NUIvOEl2UzliamxVN3hLVlR0M1pWWkc0N0R5aFJXTmRpVEs1NFF3dFdhCmtCYUZrV2xTQWJaUk5iOWwyak85NEFMelRCb0ttVU04QTBlZFBQbXdvTFFaZlV2NVp6SCtGM05PenNVT1I5dFIKbnhva3lkSU14WUlpQWp1YThudXRLK0g2TklsRDRiVVA1MVZSNFJsNjBhdHhSWi81OW1HMWw1ZUNVSWtObVJyaQpwY2FQTjBBa3NzR2dCNmpxK3VXMXhPU0l1M21idVl3amdzTEpqWTFkNkNuS1IvQ1RRZnRBKzB2NFNVRTJBTFRGClg0TEFRVXFsM0F2NU8wWkxFQXAzNE5aR0xGNCtnRmJuYi84MmdYTlBuY2IzQkxOR0tKVE5zL0RGTTBkYlgwajcKY3VIMHQvT01oV2YyZ084eTNBMDB6dkIzcTVZSkIwdz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=' | base64 -d > ca.crt
  1. -----BEGIN CERTIFICATE-----
  2. MIIDEzCCAfugAwIBAgIQcwxsCmVcOWdiebSITDqOdjANBgkqhkiG9w0BAQsFADAU
  3. MRIwEAYDVQQDEwloYXJib3ItY2EwHhcNMjIxMjI4MDYwNTMwWhcNMjMxMjI4MDYw
  4. NTMwWjAUMRIwEAYDVQQDEwloYXJib3ItY2EwggEiMA0GCSqGSIb3DQEBAQUAA4IB
  5. DwAwggEKAoIBAQCx4aPEnBy+lbpIlK+rfilvwHZBQ335kyq18JXxip9uHT4VA1S1
  6. ln9jumADxJi8BxVe+fVPCYnTxbh5bnkzjvoWzJm99LEF9P2OunUfvBXkzTVD+J5N
  7. Af8r2kj0TSrNreUJ/rpGMfOUu0TRJ867h5Xx5hJAx3eZY8/4EZfP9QFFQlTdqD1A
  8. idRDrv1BHbHj3qV57rB8/uq1RukhcAFhvVW+3/vcdzPZKHcsG8wua6ivzA1+OzkX
  9. LP6+l/ryOzKVXodSvGWTfW2iJQDR2jIibGYhIAwH2+fU81RktclKNtohYanZb7Nu
  10. Sq9s8Puov6WRC1jpEGzr8mGhJLHmprL6TWx7AgMBAAGjYTBfMA4GA1UdDwEB/wQE
  11. AwICpDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDwYDVR0TAQH/BAUw
  12. AwEB/zAdBgNVHQ4EFgQUYsljvjCgqyGcQgVVKK9Nr+yO2ZYwDQYJKoZIhvcNAQEL
  13. BQADggEBAJwSd2An2jDtzz5B/8IvS9bjlU7xKVTt3ZVZG47DyhRWNdiTK54QwtWa
  14. kBaFkWlSAbZRNb9l2jO94ALzTBoKmUM8A0edPPmwoLQZfUv5ZzH+F3NOzsUOR9tR
  15. nxokydIMxYIiAjua8nutK+H6NIlD4bUP51VR4Rl60atxRZ/59mG1l5eCUIkNmRri
  16. pcaPN0AkssGgB6jq+uW1xOSIu3mbuYwjgsLJjY1d6CnKR/CTQftA+0v4SUE2ALTF
  17. X4LAQUql3Av5O0ZLEAp34NZGLF4+gFbnb/82gXNPncb3BLNGKJTNs/DFM0dbX0j7
  18. cuH0t/OMhWf2gO8y3A00zvB3q5YJB0w=
  19. -----END CERTIFICATE-----


将证书保存在docker目录下,创建根域名相同的子目录,这一步建议所有机器都执行

mkdir -p /etc/docker/certs.d/core.harbor.domain
cp ca.crt /etc/docker/certs.d/core.harbor.domain/

6.配置host
建议所有机器执行
将harbor域名解析到ingress-nginx的svc的clusterIP,实现内网使用harbor的功能

kubectl get svc -n ingress-nginx
NAME                                       TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller-admission-nginx   ClusterIP   10.106.125.71    <none>        443/TCP                      48d
ingress-nginx-controller-nginx             NodePort    10.108.233.252   <none>        80:31203/TCP,443:32292/TCP   48d
echo '10.108.233.252 core.harbor.domain' >> /etc/hosts

三.测试
1.浏览器访问harbor
修改本机host

47.92.*.*  core.harbor.domain

查看ingress-nginx暴露的https协议端口,这里我们能看到https协议的端口是32292

kubectl get svc -n ingress-nginx
NAME                                       TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller-admission-nginx   ClusterIP   10.106.125.71    <none>        443/TCP                      48d
ingress-nginx-controller-nginx             NodePort    10.108.233.252   <none>        80:31203/TCP,443:32292/TCP   48d

浏览器访问


2.服务器内部访问harbor
docker login https://core.harbor.domain
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/977380
推荐阅读
相关标签
  

闽ICP备14008679号