TUNA-JP Advent Calendar 2021 その2の10日目のエントリです。
"Tanzu Community EditionをDocker上にインストールするメモ" で構築したクラスタにHarborをインストールします。 依存PackageとしてCert ManagerとContourもインストールします。
以下はLinux上にインストールした環境で検証しています。
なお、Tanzu Kubernetes Gridの場合のインストール方法は こちらの記事 を参照してください。
目次
Cert Manager Packageのインストール
https://tanzucommunityedition.io/docs/latest/package-readme-cert-manager-1.5.3/ の通り。
次のコマンドでCert Managerをインストールします。
tanzu package install cert-manager --package-name cert-manager.community.tanzu.vmware.com --version 1.5.3 --namespace tce-package-install
Contour Packageのインストール
https://tanzucommunityedition.io/docs/latest/package-readme-contour-1.18.1/ の通り。
次のコマンドでContourをインストールします。
tanzu package install contour --package-name contour.community.tanzu.vmware.com --version 1.18.1 --namespace tce-package-install
今回はMetal LBがインストールされている環境にインストールしたので、EnvoyにはExternal IPが振られています。
$ kubectl get svc -n projectcontour
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
contour ClusterIP 100.71.19.88 <none> 8001/TCP 42m
envoy LoadBalancer 100.69.53.186 172.18.0.200 80:31910/TCP,443:31811/TCP 42m
Harbor Packageのインストール
https://tanzucommunityedition.io/docs/latest/package-readme-harbor-2.2.3/ の通り。
設定項目を変更するために、次のコマンドでHarbor PackageのimgpkgBundleをダウンロードします。
IMAGE_URL=$(kubectl get packages harbor.community.tanzu.vmware.com.2.2.3 -o jsonpath='{.spec.template.spec.fetch[0].imgpkgBundle.image}')
imgpkg pull -b ${IMAGE_URL} -o /tmp/harbor
設定項目を定義するvalues.yaml
をコピーし、パスワードなどを自動生成します。
cp /tmp/harbor/config/values.yaml harbor-values.yaml
/tmp/harbor/config/scripts/generate-passwords.sh harbor-values.yaml
Harborのホスト名を決めます。ここではsslip.ioを利用します。
ENVOY_IP=$(kubectl get svc -n projectcontour envoy -ojsonpath='{.status.loadBalancer.ingress[0].ip}')
HARBOR_HOST=harbor-$(echo ${ENVOY_IP} | sed 's/\./-/g').sslip.io
a-b-c-d.sslip.io
もharbor-a-b-c-d.sslip.io
もa.b.c.d
に解決されます。
このホスト名をharbor-values.yaml
に設定します。
sed -i."" "s/harbor\.yourdomain\.com/${HARBOR_HOST}/g" harbor-values.yaml
先頭の2行を削除します。
sed -i."" '1,2d' harbor-values.yaml
このharbor-values.yaml
を使ってHarborをインストールします。
tanzu package install harbor --package-name harbor.community.tanzu.vmware.com --version 2.2.3 --namespace tce-package-install --values-file harbor-values.yaml
インストールが完了し、次のHTTPProxyリソースができていることを確認します。
$ kubectl get httpproxy -n harbor
NAME FQDN TLS SECRET STATUS STATUS DESCRIPTION
harbor-httpproxy harbor-172-18-0-200.sslip.io harbor-tls valid Valid HTTPProxy
harbor-httpproxy-notary notary.harbor-172-18-0-200.sslip.io harbor-tls valid Valid HTTPProxy
Harborにアクセス
次のコマンドでHarborのCA証明書をダウンロードします。
kubectl get secret -n harbor harbor-tls --template '{{index .data "ca.crt" | base64decode}}' > ca.crt
次のコマンドでも取得できます。
curl -sk https://${HARBOR_HOST}/api/v2.0/systeminfo/getcert > ca.crt
このCA証明書をDockerが信頼できるように次のフォルダに移動します。
sudo mkdir -p /etc/docker/certs.d/${HARBOR_HOST}
sudo mv ca.crt /etc/docker/certs.d/${HARBOR_HOST}
Macの場合は次のコマンドを実行した後、Dockerを再起動する必要があります。TCE on Dockerは再起動に対応していない?
# https://blog.container-solutions.com/adding-self-signed-registry-certs-docker-mac sudo security add-trusted-cert -d -r trustRoot -k ~/Library/Keychains/login.keychain ca.crt
生成されたHarborのパスワードを取得し、ログインします。
HARBOR_PASSWORD=$(grep harborAdminPassword harbor-values.yaml | awk '{print $2}')
docker login ${HARBOR_HOST} -u admin -p ${HARBOR_PASSWORD}
Error response from daemon: Get "https://${HARBOR_HOST}/v2/": x509: certificate signed by unknown authority
がでたら、CA証明書を信頼する設定が間違っています。
ログインできたら、Dockerイメージをpushします。
docker pull gcr.io/google-samples/hello-app:1.0
docker tag gcr.io/google-samples/hello-app:1.0 ${HARBOR_HOST}/library/hello-app:1.0
docker push ${HARBOR_HOST}/library/hello-app:1.0
Webブラウザからも確認できます。
次は自己署名証明を使用したHarborにTanzu Kubernetes Clusterからアクセスする方法を紹介します。