0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Tanzu Mission ControlでHarborを持ち込みの証明書を使ってインストールする

Last updated at Posted at 2023-08-30

Tanzu Mission Control(以下TMC)を活用し、なるべくCLIを使わずクラスタ構築からHarborの起動までをやってみる。

最初にHarborで使うドメインを環境変数で定義しておく。

export MYDOMAIN="harbor.tkg.tanzu"

この変数は色々なところで使い回すので、作業を中断してログアウト等した場合は再度設定するのを忘れないこと。

Harborの証明書の準備

Harborの証明書を持ち込んだ想定で実施するが、とはいいつつ正式な証明書を用意するのは面倒なので、自己署名証明書を手動で作成し、これを持ち込んでHarborを立ち上げる。
Harborの自己署名証明書の作成手順はHarborの公式サイトの手順を参考にした。
証明書の中身の説明は本旨ではないのでここでは省略する。

mkdir harbor-cert
cd harbor-cert
openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -sha512 -days 3650 \
    -subj "/C=CN/ST=Tokyo/L=Tokyo/O=example/OU=Personal/CN=$MYDOMAIN" \
    -key ca.key \
    -out ca.crt
openssl genrsa -out ${MYDOMAIN}.key 4096
openssl req -sha512 -new \
    -subj "/C=CN/ST=Tokyo/L=Tokyo/O=example/OU=Personal/CN=$MYDOMAIN" \
    -key ${MYDOMAIN}.key \
    -out ${MYDOMAIN}.csr
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=$MYDOMAIN
DNS.2=yourdomain
DNS.3=hostname
EOF
openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in ${MYDOMAIN}.csr \
    -out ${MYDOMAIN}.crt
cd -

Workload Clusterをデプロイする

Tanzu Mission ControlからWorkload Clusterを作成する。
証明書を持ち込んでのクラスタ作成は以前書いた以下の記事を参考に実施する。

上記の記事でまとめているので、ここでは作成手順は割愛する。

Harborの前提パッケージのインストール

Harborの前提としてContourが必要であり、Contourの前提としてcert-managerが必要なので、それぞれをTMCでインストールする。
TMCで作成したクラスタを選択後、Add-ons->BROWSE PACKAGESからcert-managerの下のINSTALL PACKAGEを選択する
1693376172291.png
次にkind: PackageInstallkind: AppをインストールするNamespaceを指定する。
右上のCARVEL SETTINGSをクリックし、Namespaceを指定する。
1693379203734.png

なお、Namespaceを指定しない場合はNamespaceが自動で生成される。

Package namecert-managerとし、その他は変更せずにINSTALL PACKAGEをクリックしてインストールを実行する。
インストールが完了すると、GUI上からcert-managerの状態が緑色✅で表示される。
1693376420510.png
同じ手順でContourもインストールする。
Contourのvalues.yamlはこちらでベースが公開されているのでこれをコピーしてOverlay YAMLのところに貼り付ける。
NodePortではなくLoadbalancerIPで公開するため、貼り付けた後にenvoy.service.typeLoadBalancerに変更している。
1693377716017.png
Package namecontourとしてINSTALL PACKAGEをクリックしてインストールを実行する。
インストールが完了すると、GUI上からcontourの状態が緑色✅で表示される。
1693377550477.png

Harborのインストール

Harborのインストール画面で、GENERATE YAML FROM TABLEからベースとなるvalues.yamlを生成する。(なお、CLIの手順と比べて編集項目が増え、パスワードも自動で生成されないため、編集項目を減らしたい人はCLIの手順でvalues.yamlを作るのを推奨する)
1693382337074.png
コピーして、一旦harbor-data-values.yamlという名前で保存する。
保存したものを編集し、以下の項目を編集する。

  • generate-passwords.shで設定される項目
    • core.secret
    • core.xsrfKey
    • database.password
    • harborAdminPassword ※ログイン時に利用する
    • jobservice.secret
    • secretKey
  • contourHttpProxy.idleTimeout: 30m
  • contourHttpProxy.timeout: 30m
  • hostname: 環境変数MYDOMAINと同じ値を指定
  • tlsCertificate."ca.crt": 作成した自己証明書のca.crt
  • tlsCertificate."tls.crt": 作成した自己証明書の${MYDOMAIN}.crt
  • tlsCertificate."tls.key": 作成した自己証明書の${MYDOMAIN}.key

作成したharbor-data-values.yamlをContourの時と同じようにOverlay YAMLのところに貼り付けてインストールを実施する。
image.png
インストールが完了し、$MYDOMAINのアドレスがContourのExternalIPとなるよう名前解決できていれば、Harborにログインできる。
1693386078484.png

Harborの利用

dockerコマンドでpushする

Dockerで利用するために、Harborの証明書をdockerdに読み込ませる。

sudo mkdir -p /etc/docker/certs.d/${MYDOMAIN}/
sudo cp ./harbor-cert/ca.crt /etc/docker/certs.d/${MYDOMAIN}/
sudo systemctl restart docker

docker loginする。

echo 'xxxx' | docker login -u admin --password-stdin  ${MYDOMAIN}

イメージをpushする。

docker pull nginx
docker tag nginx ${MYDOMAIN}/library/nginx
docker push ${MYDOMAIN}/library/nginx

kubectl runで起動する

せっかくなので、TMCでPodが起動する環境の準備もする。
最初にデプロイ先のNamespaceを作成する。
左サイドバーのNamespaces選択後、CREATE NAMESPACEをクリックする。
1693386623257.png
Namespace名やClusterを選択してCREATEで作成する。
ここではNamespace名はdemoとする。
なお、Workspaceが必須となっているので、作っていない場合は作ってから実施すること。
1693386729304.png
次にHarborの認証情報を格納したSecretを作成する。
左サイドバーのClustersからAdd-onsを選択し、下の方にあるKubernetes secretsを選択してCREATE SECRETをクリックする。
クリック後、Secret名(ここではharbor-credとした)とHarborの認証情報を入力する。また、先程作ったNamespaceも指定する。
1693386982549.png

CREATEをクリック後、今回はSecretの他Namespaceへの流用は実施しないため、そのままFINISHをクリックして終了する。

次に、先程のnginxを起動する。
ターミナルに戻り、先程作成したSecretをdefaultのServiceAccountが利用するよう、ServiceAccountのimagePullSecretを編集する。

kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "harbor-cred"}]}' -n demo

nginxを起動する。

kubectl run --image ${MYDOMAIN}/library/nginx nginx -n demo

起動したことを確認する。

$ kubectl get pod -n demo
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          24s

問題なさそうだ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?