vm.gowatana.jp

NEOにほんごVMware(仮)

Tanzu Mission Control Self-Managed 自宅ラボ構築。Part-04 cert-manager のインストール

Tanzu Mission Control Self-Managed(TMC-SM)を自宅ラボに構築します。今回は Tanzu Kubernetes Grid に、TMC-SM の前提となる 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

gist.github.com

 

そして、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

gist.github.com

 

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 を設定します。

gist.github.com

 

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

gist.github.com

 

今回は、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

 

つづく。