Kubernetes 學習筆記 - 3.5 使用 Harbor 架設本地 docker registry
本篇使用
Harbor來建立本地使用的 Docker Registry 來使用自己撰寫的 image。
本篇目標:
- 安裝 helm
- 安裝 ingress-nginx
- 安裝 Harbor 並且使用 ingress-nginx 暴露服務
- 使用 Harbor 作為源推上 image
目的:
由於是於本機練習 Kubernetes ,在目前網路教學中基本上都是用 Docker Hub 去作為 Docker Registry 源,
而使用 Harbor 可以使用本地端資源進行練習,也可以省掉網路傳輸。
本地
my-harbor-core.harbor.svc.cluster.local
> {{ NAME }}.{{ NAMESPACE }}.{{ KIND }}.cluster.local
安裝 helm
brew install helm
使用到的指令有
helm list # 查看 namespace 跟 name
helm show values harbor/harbor > values.yaml # 取得 harbor 的 values.yaml
# 修改 values.yaml 檔案或是建立完後再使用 kubectl edit 去修改
# 1.) 先修改完後使用 values.yaml 安裝
helm install my harbor/harbor -n harbor -f values.yaml
# 2.) 安裝完後再使用 kubectl edit 去修改 -> 先使用 kubectl get ingress 確定 ingress 名稱
kubectl edit -n harbor ingress/my-harbor-ingress
helm get values my -n harbor # -n 代表對應的 namespace
安裝 ingress-nginx
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx helm repo update helm upgrade --install ingress-nginx ingress-nginx \ --repo https://kubernetes.github.io/ingress-nginx \ --namespace ingress-nginx --create-namespace安裝完 ingress-nginx 之後,可以透過以下指令查看是否有成功安裝:
helm ls -n ingress-nginx查看 kubectl 資訊:
kubectl get po,svc,ingressclasses -n ingress-nginx
從上圖看到, service 中的
service/ingress-nginx-controller的EXTERNAL-IP為localhost
安裝 Harbor 並且使用 ingress-nginx 暴露服務
設定 ingress class 暴露 使用 ingress-nginx 暴露服務,有兩種作法:
-
- 先將想要將 helm 的 values.yaml 修改成自己想要的設定,在進行安裝
-
- 安裝完之後,再進行 ingress 的設定
兩種作法對應到下方程式碼的1)與2)兩種作法
- 安裝完之後,再進行 ingress 的設定
helm repo add harbor https://helm.goharbor.io helm repo update # 1) 取得 harbor 的 values.yaml helm show values harbor/harbor > values.yaml # 修改 values.yaml 的: # expose.ingress.hosts.core: 設定域名,預設: core.harbor.domain # expose.ingress.className: 設定想要使用的 ingress controller ,預設: nginx # externalURL: 設定域名,預設: https://core.harbor.domain # harborAdminPassword: 設定密碼: 預設: Harbor12345 helm upgrade --install my harbor/harbor -f values.yaml \ --repo https://helm.goharbor.io \ --namespace harbor --create-namespace # 2) 直接修改 harbor 的 ingress class -> spec.ingressClassName kubectl edit -n harbor ingress/my-harbor-ingress # 上述方式 1) 與 2) 擇一即可 # 查看是否有成功配置… 請觀察 CLASS, HOSTS, ADDRESS kubectl get ingress -n harbor my-harbor-ingress安裝完 Harbor 之後,可以透過以下指令查看是否有成功安裝:
helm ls -n harbor查看 kubectl 資訊:
kubectl get po,svc,ingressclasses -n harbor需要確定 ingress class 是否有指定,如圖所示: nginx >
編輯 /etc/hosts 設定域名指向 127.0.0.1
127.0.0.1 core.harbor.domain取得 secret
kubectl get secret -n harbor my-harbor-core -o json kubectl get secret -n harbor my-harbor-core -o jsonpath={.data.HARBOR_ADMIN_PASSWORD} | base64 -d查看目前建立起來的服務
使用 Harbor 作為源拉取 image
預設帳號密碼: admin/Harbor12345
# 認證相關,先登入 Harbor docker login core.harbor.domain # 這個是 docker images 的 id 後面是你要推上去的目標位置 docker tag d70a03b56607 core.harbor.domain/demo/base-php # 想要推上去的倉庫,設定版本號 docker push core.harbor.domain/demo/base-php:0.0.1
從上圖看到, service 中的
編輯 /etc/hosts 設定域名指向 127.0.0.1