Tanzu Mission Control Self-Managed(TMC-SM)を自宅ラボに構築します。今回は Tanzu Kubernetes Grid に、TMC-SM の前提となる cert-manager を作成します。
前回はこちら。
今回の内容です。
- 0. Workload Cluster への接続
- 1. kapp-controller への Harbor CA 証明書の追加
- 2. Tanzu Standard パッケージ リポジトリの追加
- 3. cert-manager のインストール
Tanzu Standard のパッケージ リポジトリから cert-manager をインストールして、証明書を発行する Cluster Issuer(CA 用 / TMC-SM 用) を作成します。
0. Workload Cluster への接続
TKG Workload Cluster の kubeconfig を取得して、コンテキストを切り替えます。
$ tanzu cluster kubeconfig get --admin tkg22wc03 $ kubectl config use-context tkg22wc03-admin@tkg22wc03
kubectl で、Workload Cluster のノード一覧を取得できることを確認しておきます。
$ kubectl get nodes NAME STATUS ROLES AGE VERSION tkg22wc03-m4mmh-4m5r9 Ready control-plane 14m v1.25.7+vmware.2 tkg22wc03-m4mmh-6mdx6 Ready control-plane 18m v1.25.7+vmware.2 tkg22wc03-m4mmh-l7x76 Ready control-plane 20m v1.25.7+vmware.2 tkg22wc03-md-0-dgf2s-7cf689998f-c4bt8 Ready <none> 19m v1.25.7+vmware.2 tkg22wc03-md-1-4z6f6-5ccbfc48bc-vgq8t Ready <none> 19m v1.25.7+vmware.2 tkg22wc03-md-2-m9gnx-7ccdd468dd-kvdw9 Ready <none> 19m v1.25.7+vmware.2
1. kapp-controller への Harbor CA 証明書の追加
Workload Cluster の kapp-controller に、Harbor の CA 証明書を追加します。
パターン A: Management Cluster 側の KappControllerConfig に CA 証明書を追加
下記のように、Management Cluster の <Wrokload Cluster 名>-kapp-controller-package KappControllerConfig リソースに、Harbor の CA 証明書を追加する YAML ファイルを作成しておきます。
tkg22wc03-kapp-controller-package_add-harbor-cert.yml
そして、Management Cluster 側(--context tkg22mc03-admin@tkg22mc03)で YAML を適用します。
$ kubectl apply -f tkg22wc03-kapp-controller-package_add-harbor-cert.yml --context tkg22mc03-admin@tkg22mc03
少し待つと、Workload Cluster の kapp-controller-config ConfigMap に、Harbor の CA 証明書が追加されます。
$ kubectl -n tkg-system get cm kapp-controller-config -o jsonpath={.data.caCerts}
パターン B: Workload Cluster 側での kapp-controller-config Secret 作成
TKG の Management Cluster にアクセスできない場合は、Workload Cluster の kapp-controller-config Secret に、Harbor の CA 証明書を追加します。ちなみに、kapp-controller-config ConfigMap への設定変更は自動復元されてしまいます。
下記のように caCerts を記載した Secret の YAMLを作成しておきます。
kapp-controller-config_secret.yml
kapp-controller-config Secret を作成します。
$ kubectl apply -f kapp-controller-config_secret.yml secret/kapp-controller-config created
かわりに、kapp-controller-config ConfigMap を削除します。
$ kubectl -n tkg-system delete cm kapp-controller-config configmap "kapp-controller-config" deleted
kapp-controller Pod の再起動
Workload Cluster で、kapp-controller の Pod を再起動しておきます。
kapp-controller の Pod の名前を確認します。
$ kubectl -n tkg-system get pod | grep kapp-controller kapp-controller-85995f44cf-dzvb9 2/2 Running 0 119m
Pod を再起動(削除)します。
$ kubectl -n tkg-system get pod kapp-controller-85995f44cf-dzvb9
再作成された kapp-controller の Pod が Running になったことを確認します。
$ kubectl -n tkg-system get pod | grep kapp-controller kapp-controller-85995f44cf-6wbd8 2/2 Running 0 7s
2. Tanzu Standard パッケージ リポジトリの追加
Harbor にコピー済みの Tanzu Standard パッケージ リポジトリを、Workload Cluster に追加します。
- このラボの Harbor の FQDN は、lab-harbor-03.go-lab.jp です。
- Workload Cluster には、Harbor の CA 証明書を追加しておく必要があります。
$ tanzu package repository add tanzu-standard-pkg --url lab-harbor-03.go-lab.jp/tkg/tanzu-standard:v2.2.0 --namespace tkg-system
ちなみに、インターネット公開されている Tanzu Standard パッケージ リポジトリを登録する場合は、下記のようになります。
$ tanzu package repository add tanzu-standard --url projects.registry.vmware.com/tkg/packages/standard/repo:v2.2.0 --namespace tkg-system
パッケージ リポジトリが追加されました。
$ tanzu package available list -n tkg-system NAME DISPLAY-NAME cert-manager.tanzu.vmware.com cert-manager contour.tanzu.vmware.com contour external-dns.tanzu.vmware.com external-dns fluent-bit.tanzu.vmware.com fluent-bit fluxcd-helm-controller.tanzu.vmware.com Flux Helm Controller fluxcd-kustomize-controller.tanzu.vmware.com Flux Kustomize Controller fluxcd-source-controller.tanzu.vmware.com Flux Source Controller grafana.tanzu.vmware.com grafana harbor.tanzu.vmware.com harbor multus-cni.tanzu.vmware.com multus-cni prometheus.tanzu.vmware.com prometheus whereabouts.tanzu.vmware.com whereabouts
3. cert-manager のインストール
cert-manager のパッケージをインストールして、証明書を発行する Cluster Issuer を作成します。
3-1. cert-manager のインストール
TMC-SM 関連のパッケージは、tmc-local Namespace にインストールします。しかし今回の cert-manager のパッケージは、TMC-SM の再インストールで試行錯誤しやすいように tkg-system Namespace にインストールしておきます。
インストール可能な cert-manager のパッケージ一覧です。
$ tanzu package available list cert-manager.tanzu.vmware.com -n tkg-system NAME VERSION RELEASED-AT cert-manager.tanzu.vmware.com 1.1.0+vmware.1-tkg.2 2020-11-24 18:00:00 +0000 UTC cert-manager.tanzu.vmware.com 1.1.0+vmware.2-tkg.1 2020-11-24 18:00:00 +0000 UTC cert-manager.tanzu.vmware.com 1.10.2+vmware.1-tkg.1 2023-01-11 12:00:00 +0000 UTC cert-manager.tanzu.vmware.com 1.5.3+vmware.2-tkg.1 2021-08-23 17:22:51 +0000 UTC cert-manager.tanzu.vmware.com 1.5.3+vmware.4-tkg.1 2021-08-23 17:22:51 +0000 UTC cert-manager.tanzu.vmware.com 1.5.3+vmware.7-tkg.1 2021-08-23 17:22:51 +0000 UTC cert-manager.tanzu.vmware.com 1.5.3+vmware.7-tkg.3 2021-08-23 17:22:51 +0000 UTC cert-manager.tanzu.vmware.com 1.7.2+vmware.1-tkg.1 2021-10-29 12:00:00 +0000 UTC cert-manager.tanzu.vmware.com 1.7.2+vmware.3-tkg.1 2021-10-29 12:00:00 +0000 UTC cert-manager.tanzu.vmware.com 1.7.2+vmware.3-tkg.3 2021-10-29 12:00:00 +0000 UTC
cert-manager は、v1.10.2 をインストールします。これは EOL になっているバージョン ですが、TMC-SM の要件で利用する場合のみ VMware ではサポートされるようです。
$ tanzu package install cert-manager --package cert-manager.tanzu.vmware.com --version 1.10.2+vmware.1-tkg.1 --namespace tkg-system
cert-manager のパッケージがインストールされました。
$ tanzu package installed get -n tkg-system cert-manager NAMESPACE: tkg-system NAME: cert-manager PACKAGE-NAME: cert-manager.tanzu.vmware.com PACKAGE-VERSION: 1.10.2+vmware.1-tkg.1 STATUS: Reconcile succeeded CONDITIONS: - type: ReconcileSucceeded status: "True" reason: "" message: ""
cert-manager の Pod は、cert-manager Namespace に作成されます。
$ kubectl get pods -n cert-manager NAME READY STATUS RESTARTS AGE cert-manager-7548d8ddb5-47spr 1/1 Running 0 2m2s cert-manager-cainjector-7d47dd687f-mxqlb 1/1 Running 0 2m2s cert-manager-webhook-784544f9b8-xgpjv 1/1 Running 0 2m2s
3-2. Cluster Issuer(CA)の作成
CA となる Cluster Issuer を作成します。下記のような YAML ファイルを用意しておきます。
cert-manager_ca.yml
- Cluster Issuer の名前は任意ですが、今回は selfsigned-ca-issuer としています。
- Certificate は、この後に作成する TMC-SM の Cluster Issuer から参照できるように、cert-manager Namespace に作成します。
- CA なので、Certificate に isCA: true を設定します。
Cluster Issuer と CA 証明書を作成します。
$ kubectl apply -f ./cert-manager_ca.yml clusterissuer.cert-manager.io/selfsigned-ca-issuer created certificate.cert-manager.io/selfsigned-ca created
Cluster Issuer が作成されました。
$ kubectl get clusterissuer NAME READY AGE selfsigned-ca-issuer True 53s
3-3. Cluster Issuer(CA)の CA 証明書の確認
発行された CA 証明書は、cert-manager Namespace の root-secret Secret に格納されています。
$ kubectl get certificate -n cert-manager NAME READY SECRET AGE selfsigned-ca True root-secret 77s
格納されている CA 証明書は Base64 でエンコードされているので、「base64 -d」でデコードします。この証明書は TMC-SM のインストールで必要になるので、ファイルなどに保存しておきます。
$ kubectl get secret root-secret -n cert-manager -o jsonpath='{.data.ca\.crt}' | base64 -d -----BEGIN CERTIFICATE----- MIIBcDCCARagAwIBAgIQBkcGhcgD9prj/0G0mjfWwzAKBggqhkjOPQQDAjAYMRYw FAYDVQQDEw1zZWxmc2lnbmVkLWNhMB4XDTIzMDgwNjE5MTQ0MFoXDTIzMTEwNDE5 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX BggqhkjOPQQDAgNIADBFAiEAtxVrwUqKNh2VckiuwhyeqOVZfBNfevYZQDSr+Jm7 ewUCIC8xV09zw947FxawEV17tY9I69lsVsplT9kZE7HPsNFU -----END CERTIFICATE-----
3-4. Cluster Issuer(TMC-SM 用)の作成
TMC-SM の展開での証明書発行で使用する Cluster Issuer を作成します。TMC-SM から利用するには、Issuer ではなく Cluster Issuer で作成しておく必要があります。
cert-manager_local-issuer.yml
今回は、local-issuer という名前で作成します。
$ kubectl apply -f ./cert-manager_local-issuer.yml clusterissuer.cert-manager.io/local-issuer created
Cluster Issuer が作成されました。
$ kubectl get clusterissuer NAME READY AGE local-issuer True 2m35s selfsigned-ca-issuer True 10m
つづく。