サービスに割り当てることができる外部 IP アドレスを制限する
Kubernetes サービスには、クラスターの内部から次を経由することで到達できます。
-
Kubernetes によって自動的に割り当てられるクラスター IP アドレス
-
サービス仕様で
externalIPs
プロパティに指定した任意の IP アドレス 外部IPアドレスは Kubernetes によって管理されておらず、クラスター管理者の責任です。externalIPs
で指定される外部 IP アドレスは、クラウドプロバイダーによって提供されるLoadBalancer
タイプのサービスに割り当てられる外部 IP アドレスとは異なります。
Kubernetes サービスの詳細については、「Kubernetes ドキュメント」の「サービスexternalIPs
に指定できる IP アドレスを制限できます。
-
webhook の証明書を管理するには、
cert-manager
をデプロイします。詳細については、「cert-manager」(証明書マネージャー) ドキュメントを参照してください。 kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.4/cert-manager.yaml
-
cert-manager
Pods が実行中であることを確認します。kubectl get pods -n cert-manager
出力例は次のとおりです。
NAME READY STATUS RESTARTS AGE cert-manager-58c8844bb8-nlx7q 1/1 Running 0 15s cert-manager-cainjector-745768f6ff-696h5 1/1 Running 0 15s cert-manager-webhook-67cc76975b-4v4nk 1/1 Running 0 14s
-
既存のサービスを確認して、アドレスを制限する CIDR ブロックに含まれない外部 IP アドレスが割り当てられていないことを確認します。
kubectl get services -A
出力例は次のとおりです。
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE cert-manager cert-manager ClusterIP 10.100.102.137 <none> 9402/TCP 20m cert-manager cert-manager-webhook ClusterIP 10.100.6.136 <none> 443/TCP 20m default kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 2d1h externalip-validation-system externalip-validation-webhook-service ClusterIP 10.100.234.179 <none> 443/TCP 16s kube-system kube-dns ClusterIP 10.100.0.10 <none> 53/UDP,53/TCP 2d1h my-namespace my-service ClusterIP 10.100.128.10 192.168.1.1 80/TCP 149m
いずれかの値が、アクセスを制限するブロック内にない IP アドレスである場合は、ブロック内に存在するアドレスを変更し、サービスを再びデプロイする必要があります。例えば、前の出力の
my-service
サービスには、ステップ 5 の CIDR ブロックの例に含まれていない外部 IP アドレスが割り当てられています。 -
外部 IP のウェブフックマニフェストをダウンロードします。また、GitHub で ウェブフックのソースコード
を確認できます。 curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/docs/externalip-webhook.yaml
-
CIDR ブロックを指定します。ダウンロードしたファイルをエディタで開き、次の行の最初の
\#
を削除します。#args: #- --allowed-external-ip-cidrs=10.0.0.0/8
10.0.0.0/8
を独自の CIDR ブロックに置き換えます。ブロックはいくつでも指定できます。複数のブロックを指定する場合は、ブロック間にコンマを追加します。 -
クラスターが
us-west-2
AWS に存在しない場合、ファイル内のus-west-2
、602401143452
、およびamazonaws.com
を次のコマンドに置き換えます。コマンドを実行する前に、region-code
および111122223333
を「Amazon EKS アドオンの Amazon コンテナイメージレジストリを表示する」のリストから AWS リージョンの値に置き換えます。sed -i.bak -e 's|602401143452|111122223333|' externalip-webhook.yaml sed -i.bak -e 's|us-west-2|region-code|' externalip-webhook.yaml sed -i.bak -e 's|amazonaws.com||' externalip-webhook.yaml
-
マニフェストをクラスターに適用します。
kubectl apply -f externalip-webhook.yaml
「CIDR ブロックを指定します」のステップで指定したブロックに含まれていない、
externalIPs
に指定された IP アドレスを使用して、サービスをクラスターにデプロイしようとすると、失敗します。