NEW: プロジェクトの最新情報をTwitterMastodonで入手してください

Kubernetesプラットフォームプロバイダーとの互換性

以下に、cert-managerのデプロイ時に影響を受ける可能性のある、さまざまな互換性の問題や癖について詳しく説明します。何か見落としがあると思われる場合は、お気軽に問題を提起するか、詳細を記載したプルリクエストを送信してください。

AWS Fargateを使用している場合、またはホストのネットワークで実行するようにcert-managerを特別に構成している場合は、kubeletがデフォルトでポート10250でリッスンしていることに注意してください。これは、cert-manager webhookのデフォルトポートと衝突します。

そのため、cert-managerをセットアップするときは、webhookのポートを変更する必要があります。

Helmを使用してインストールする場合、コマンドラインフラグまたはvalues.yamlファイルのエントリのいずれかを使用してcert-managerをインストールするときに、webhook.securePortパラメーターを設定できます。

ポートの衝突が発生した場合、信頼されていない証明書に関する紛らわしいエラーメッセージが表示される可能性があります。詳細については、#3237を参照してください。

GKE

Googleがプライベートクラスターのコントロールプレーンを構成すると、Kubernetesクラスターのネットワークと、Googleが管理する別のプロジェクトの間で、VPCピアリングが自動的に構成されます。

クラスター内でGoogleがアクセスできるものを制限するために、構成されたファイアウォールルールによって、Kubernetesポッドへのアクセスが制限されます。これは、webhookが機能しないことを意味し、Internal error occurred: failed calling admission webhook ... the server is currently unable to handle the requestなどのエラーが表示されます。

GKEプライベートクラスターでwebhookコンポーネントを使用するには、GKEコントロールプレーンがwebhookポッドにアクセスできるように、追加のファイアウォールルールを構成する必要があります。

GKEコントロールプレーンノードのファイアウォールルールの追加方法の詳細については、GKEドキュメントを参照してください。

GKE Autopilot

Kubernetes < 1.21のGKE Autopilotモードは、変更可能なアドミッションwebhookの制限のため、cert-managerをサポートしていません。

2021年10月の時点で、"rapid" AutopilotリリースチャネルのみがKubernetesマスターにバージョン1.21をロールアウトしています。helmチャートによるインストールはエラーメッセージで終了する可能性がありますが、一部のユーザーはcert-managerが動作していると報告しています。フィードバックとPRを歓迎します。

問題点: GKE Autopilotでは、kube-systemネームスペースの変更を許可していません。

歴史的に、同じクラスターへのcert-managerの複数インストールを防ぐために、kube-systemネームスペースを使用してきました。

デフォルト構成でこれらの環境にcert-managerをインストールすると、ブートストラップで問題が発生する可能性があります。いくつかの兆候は次のとおりです。

  • cert-manager-cainjectorが次のようなエラーをログに記録します。
E0425 09:04:01.520150 1 leaderelection.go:334] error initially creating leader election record: leases.coordination.k8s.io is forbidden: User "system:serviceaccount:cert-manager:cert-manager-cainjector" cannot create resource "leases" in API group "coordination.k8s.io" in the namespace "kube-system": GKEAutopilot authz: the namespace "kube-system" is managed and the request's verb "create" is denied
  • cert-manager-startupapicheckが完了せず、次のようなメッセージをログに記録します。
Not ready: the cert-manager webhook CA bundle is not injected yet

解決策: 次のように、リーダー選出に別の名前空間を使用するようにcert-managerを構成します。

helm install \
cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--version ${CERT_MANAGER_VERSION} --set global.leaderElection.namespace=cert-manager

kubectl applyタイプのインストールの場合、影響として「インストール前にkube-systemをcert-managerに置き換えてマニフェストを手動で更新する必要がある」または「kubectl applyを使用してcert-managerをインストールしないでください。Helmが推奨される解決策です」のいずれかになります。

AWS EKS

EKSでカスタムCNI(WeaveやCalicoなど)を使用すると、cert-managerがwebhookに到達できません。これは、EKSでコントロールプレーンをカスタムCNIで実行するように構成できないため、コントロールプレーンとワーカーノードでCNIが異なる場合に発生します。

これに対処するために、デプロイでwebhook.hostNetworkキーをtrueに設定するか、Helmを使用している場合はvalues.yamlファイルで構成することにより、webhookをホストネットワークで実行して、cert-managerがwebhookに到達できるようにすることができます。

ホストネットワークで実行するには、webhookのポートを変更する必要があることに注意してください。詳細については、ページの上部にある警告を参照してください。

AWS Fargate

AWS Fargateを使用すると、ネットワーク構成があまり許可されず、#3237で確認できるように、webhookのポートがポート10250で実行されているkubeletと衝突することに注意してください。

Fargateにcert-managerをデプロイする場合は、webhookがリッスンするポートを必ず変更する必要があります。詳細については、このページの上部にある警告を参照してください。

Fargateでは、そのネットワーキングを使用する必要があるため、ネットワーキングタイプと、helmチャートのwebhook.hostNetworkなどのオプションを手動で設定することはできず、cert-managerのデプロイが予期しない方法で失敗する可能性があります。