Amazon EKS の LoadBalancer タイプのサービスの CIDR IP アドレスを制限する方法を教えてください。

所要時間2分
0

Amazon Elastic Kubernetes Service (Amazon EKS) の LoadBalancer タイプのサービスの CIDR IP アドレスを制限したいと考えています。

簡単な説明

LoadBalancer タイプのサービスを作成すると、ソース 0.0.0.0/0 からのリクエストがデフォルトで許可されます。ロードバランサーがパブリックサブネットにある場合、リクエストはインターネット上のどこからでもワーカーノードにルーティングされます。

ソースを制限するには、0.0.0.0/0 の代わりに loadBalancerSourceRanges を使用してください。

解決策

**注:**AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

環境を設定する

環境を設定するには、次の手順を実行します。

  1. Amazon EKS クラスターを作成します。
  2. ワーカーノードを作成して起動します。
  3. kubectl をセットアップします
  4. AWS CLI をセットアップします
  5. AWS Load Balancer Controller のテストを行います
    **注:**LoadBalancer タイプのサービスの場合、AWS ロードバランサーコントローラーは Network Load Balancer (NLB) IP モードバージョン 2.0.0 以降と NLB インスタンスモード 2.2.0 以降をサポートします。

**重要:**LoadBalancer タイプのサービスに新しいネットワークロードバランサーを割り当てるには、Kubernetes Service ロードバランサーコントローラーの代わりに AWS ロードバランサーコントローラーを使用するのがベストプラクティスです。AWS バランサーコントローラーの最新バージョンについては、GitHub ウェブサイトの「aws-load-balancer-controller」を参照してください。

CIDR IP アドレスを制限する

loadBalancerSourceRangeを指定するには、次のいずれかの方法を選択します。

注釈を使う

サービスマニフェストファイル (svc.yaml) で注釈を使用します。

注釈の例:

service.beta.kubernetes.io/load-balancer-source-ranges: 143.231.0.0/16

詳細については、Kubernetes Web サイトの「アクセス制御」を参照してください。

loadBalancerSourceRanges フィールドを追加する

  1. .spec.loadbalancerSourceRanges フィールドを svc.yaml ファイルに追加します。

    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: nginx
      name: nginx
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-type: "external"
        service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "instance"
        service.beta.kubernetes.io/aws-load-balancer-scheme: "internet-facing"
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        app: nginx
      type: LoadBalancer
      loadBalancerSourceRanges:
      - "143.231.0.0/16"
  2. 次のコマンドを実行して svc.yaml ファイルを適用します。

    $ kubectl apply -f svc.yaml

    次のコマンドを実行して、AWS Load Balancer Controller のポッドログを確認します。

    $ kubectl logs -f <aws load balancer controller pod> -n <namespace>
  3. AWS Load Balancer Controller は、設定したロードバランサーソース範囲をセキュリティグループのインバウンドルールに追加します。次のコマンドを実行して、セキュリティグループのインバウンドルールが変更されていることを確認します。

    $ aws ec2 describe-security-groups --group-ids sg-XXXXXXXXXXXXXXXXX
    ...
        "CidrIp": "143.231.0.0/16"
    ...
  4. ネットワークロードバランサーを IP モードで使用する場合、.spec.LoadBalancerSourceRanges フィールドはデフォルトで無視されます。この場合、次の注釈を使用してクライアントの IP 保存を有効にしてください。

    service.beta.kubernetes.io/aws-load-balancer-target-group-attributes: preserve_client_ip.enabled=true

    Network Load Balancer タイプのサービスの場合、セキュリティグループの最大制限を増やすことをお勧めします。各ノードポートとサブネットの CIDR 範囲について、コントローラーはワーカーノードのセキュリティグループにルールを作成します。詳細については、Kubernetes ウェブサイトの「Ingress traffic」を参照してください。

    **注:**Network Load Balancer タイプのサービスの場合は、セキュリティグループの最大クォータを増やすことをお勧めします。各ノードポートとサブネットの CIDR 範囲について、コントローラーはワーカーノードのセキュリティグループにルールを作成します。たとえば、3 つのアベイラビリティーゾーンにワーカーノードがあるとします。loadBalancerSourceRange を追加します。ワーカーノードセキュリティグループには、3 つのヘルスチェックルール (サブネットごとに 1 つ) と 1 つの LoadBalancerSourceRange ルールが作成されます。セキュリティグループのデフォルトのルール制限は 60 個です。このクォータを増やすことはできますが、ネットワークインターフェイスあたりのセキュリティグループの総数は 1,000 を超えることはできません。

関連情報

ユーザーにクラスターへのアクセスを許可する

AWS公式
AWS公式更新しました 1年前
コメントはありません