IPモード
前述のように、作成したNLBは「インスタンスモード」で動作しています。インスタンスターゲットモードはAWS EC2インスタンス上で実行されているPodをサポートしています。このモードでは、AWS NLBはインスタンスにトラフィックを送信し、個々のワーカーノード上のkube-proxyがKubernetesクラスター内の1つ以上のワーカーノードを介してPodにトラフィックを転送します。
AWS Load Balancer Controllerは、「IPモード」で動作するNLBの作成もサポートしています。このモードでは、AWS NLBはKubernetesクラスター内のワーカーノードを経由する余分なネットワークホップを排除して、Serviceの背後にあるKubernetes Podに直接トラフィックを送信します。IPターゲットモードは、AWS EC2インスタンスとAWS Fargateの両方で実行されているPodをサポートしています。

前の図は、ターゲットグループモードがインスタンスとIPの場合で、アプリケーショントラフィックの流れがどのように異なるかを説明しています。
ターゲットグループモードがインスタンスの場合、トラフィックは各ノードに作成されたServiceのノードポート経由で流れます。このモードでは、kube-proxyがこのServiceを実行しているPodにトラフィックをルーティングします。ServiceのPodは、ロードバランサーからトラフィックを受信したノードとは異なるノードで実行されている可能性があります。ServiceA(緑)とServiceB(ピンク)は「インスタンスモード」で動作するように設定されています。
一方、ターゲットグループモードがIPの場合、トラフィックはロードバランサーからServiceのPodに直接流れます。このモードでは、kube-proxyのネットワークホップをバイパスします。ServiceC(青)は「IPモード」で動作するように設定されています。
前の図の数字は以下を表しています。
- ServiceがデプロイされているEKSクラスター
- Serviceを公開するELBインスタンス
- インスタンスまたはIPのいずれかに設定できるターゲットグループモードの設定
- Serviceが公開されているロードバランサーに設定されたリスナープロトコル
- Serviceの宛先を決定するために使用されるターゲットグループルール設定
NLBをIPターゲットモードで構成したい理由はいくつかあります:
- 受信接続のためのより効率的なネットワークパスを作 成し、EC2ワーカーノード上の
kube-proxyをバイパスします externalTrafficPolicyや様々な構成オプションのトレードオフなどの側面を考慮する必要がなくなります- アプリケーションがEC2ではなくFargateで実行されている場合
NLBの再構成
NLBをIPモードを使用するように再構成し、インフラストラクチャにどのような影響があるかを見てみましょう。
これはServiceを再構成するために適用するパッチです:
- Kustomize Patch
- Service/ui-nlb
- Diff
apiVersion: v1
kind: Service
metadata:
name: ui-nlb
annotations:
service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip
namespace: ui
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip
service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
service.beta.kubernetes.io/aws-load-balancer-type: external
service.beta.kubernetes.io/load-balancer-source-ranges: $INBOUND_CIDRS
name: ui-nlb
namespace: ui
spec:
ports:
- name: http
port: 80
targetPort: 8080
selector:
app.kubernetes.io/component: service
app.kubernetes.io/instance: ui
app.kubernetes.io/name: ui
type: LoadBalancer
apiVersion: v1
kind: Service
metadata:
annotations:
- service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: instance
+ service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip
service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
service.beta.kubernetes.io/aws-load-balancer-type: external
service.beta.kubernetes.io/load-balancer-source-ranges: $INBOUND_CIDRS
name: ui-nlb