14.4. cert-manager Operator のインストール
cert-manager Operator をインストールするプロジェクトを作成します。
$ oc new-project cert-manager-operator
重要クラスター内で複数の cert-manager Operator を使用しないでください。クラスターにコミュニティーの cert-manager Operator がインストールされている場合は、それをアンインストールしてから cert-manager Operator for Red Hat OpenShift をインストールする必要があります。
cert-manager Operator for Red Hat OpenShift をインストールします。
$ cat << EOF | oc apply -f - apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: openshift-cert-manager-operator-group namespace: cert-manager-operator spec: targetNamespaces: - cert-manager-operator --- apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: openshift-cert-manager-operator namespace: cert-manager-operator spec: channel: stable-v1 installPlanApproval: Automatic name: openshift-cert-manager-operator source: redhat-operators sourceNamespace: openshift-marketplace EOF
注記この Operator がインストールされ、セットアップが完了するまでに数分かかります。
cert-manager Operator が実行されていることを確認します。
$ oc -n cert-manager-operator get pods
出力例
NAME READY STATUS RESTARTS AGE cert-manager-operator-controller-manager-84b8799db5-gv8mx 2/2 Running 0 12s
cert-manager Pod によって使用されるサービスアカウントに、前に作成した AWS IAM ロールのアノテーションを付けます。
$ oc -n cert-manager annotate serviceaccount cert-manager eks.amazonaws.com/role-arn=${ROLE_ARN}
次のコマンドを実行して、既存の cert-manager コントローラー Pod を再起動します。
$ oc -n cert-manager delete pods -l app.kubernetes.io/name=cert-manager
DNS-01 チャレンジ解決の問題を防ぐために、外部ネームサーバーを使用するように Operator の設定にパッチを適用します。
$ oc patch certmanager.operator.openshift.io/cluster --type merge \ -p '{"spec":{"controllerConfig":{"overrideArgs":["--dns01-recursive-nameservers-only","--dns01-recursive-nameservers=1.1.1.1:53"]}}}'
次のコマンドを実行して、Let's Encrypt を使用する
ClusterIssuer
リソースを作成します。$ cat << EOF | oc apply -f - apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: letsencrypt-production spec: acme: server: https://acme-v02.api.letsencrypt.org/directory email: ${EMAIL} # This key doesn't exist, cert-manager creates it privateKeySecretRef: name: prod-letsencrypt-issuer-account-key solvers: - dns01: route53: hostedZoneID: ${ZONE_ID} region: ${REGION} secretAccessKeySecretRef: name: '' EOF
ClusterIssuer
リソースの準備ができていることを確認します。$ oc get clusterissuer.cert-manager.io/letsencrypt-production
出力例
NAME READY AGE letsencrypt-production True 47s