
CVE-2020-8554: LoadBalancerまたはExternalIPsを使用した中間者攻撃
CVE-2020-8554 に対処するために作成されました。
注: このチャートはKubernetes 1.21では非推奨であり、1.22以降ではサポートされていません。CVE-2020-8554を軽減するには、クラスターで DenyServiceExternalIPs アドミッションコントローラー を有効にしてください。
externalip-webhook は、サービスがランダムな外部IPを使用することを防ぐ検証用Webhookです。クラスター管理者は、allowed-external-ip-cidrs パラメータを指定することで、外部IPとして使用を許可するCIDRのリストを指定できます。このWebhookは、外部IPを必要としないサービス、または外部IPが管理者が指定した範囲内にあるサービスの作成のみを許可します。
このリポジトリは kubebuilder を使用して構築されています。
外部IPを特定のCIDRに制限するには、webhook.yaml 内の allowed-external-ip-cidrs のコメントを解除して更新してください。
注: auth-proxy が有効な場合は、metrics_server_auth_proxy.yaml 内の allowed-external-ip-cidrs も更新してください。
このリポジトリのマニフェストを使用してWebhookをデプロイするには、kustomize がパスに含まれている必要があります。
kustomize はこちらからダウンロードできます: https://kubernetes-sigs.github.io/kustomize/installation/
make deploy
make docker-build IMG=DOCKER_IMAGE_TAG
make deploy IMG=DOCKER_IMAGE_TAG
デプロイを容易にするために、rancher-externalip-webhook Helmチャートが作成されています。
外部IPを特定のCIDRに制限するには、helmコマンドで allowedExternalIPCidrs 値を設定してください。
WebhookのDockerイメージをビルドし、新しいチャートバージョンを生成するには
make rancher-ci
新しいチャートバージョンだけを生成するには
make rancher-chart-ci
Helmチャートのリビジョンは build/chart フォルダの下に生成されます。Helmチャートのアーカイブ build/chart/latest/rancher-externalip-webhook-<VERSION>.tgz とHelmチャートのフォルダ build/chart/rancher-externalip-webhook
チャートのデプロイ
helm -n externalip-webhook template rancher-externalip-webhook build/chart/latest/rancher-externalip-webhook-<VERSION>.tgz --output-dir . --set metrics.enabled=true --set metrics.prometheusExport=true
kubectl apply -R -f ./rancher-externalip-webhook
Webhookはデフォルトで externalip-validation-system 名前空間で実行されます。これは、kustomization.yaml ファイル内の namespace と namePrefix を更新することで変更できます。
Webhook証明書は、cert-managerを使用して生成するか、証明書をアップロードするかのいずれかで行えます。次のセクションでは、その方法について説明します。
kustomization.yaml ファイル内の 'CERTMANAGER' を含むすべてのセクションのコメントを解除してください。
webhook-server-cert という名前のKubernetesシークレットとしてアップロードします。caBundle フィールドを更新します。Webhookは、サービス作成または更新操作を拒否するたびに webhook_failed_request_count メトリクスを出力します。
webhook.yaml 内の --metrics-addr と containers.Port 内の該当セクションのコメントを解除してください。
Webhookメトリクスをエクスポートするには、こちら に記載されている手順に従ってください。
Kubernetesコミュニティへの関わり方については、コミュニティページ をご覧ください。
このプロジェクトのメンテナーには、以下の方法で連絡できます:
Kubernetesコミュニティへの参加は、Kubernetes Code of Conduct に従います。