Skip to content

Kubernetes學習筆記(3.5) Harbor

Published: at 12:00 AM

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

ingress-nginx 從上圖看到, service 中的 service/ingress-nginx-controllerEXTERNAL-IPlocalhost

安裝 Harbor 並且使用 ingress-nginx 暴露服務

設定 ingress class 暴露 使用 ingress-nginx 暴露服務,有兩種作法:

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 > harbor 編輯 /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

使用 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

Previous Post
Mailpit - 測試 Email 服務
Next Post
Kubernetes學習筆記(3)