VPC環境で利用できます。
Load Balancerインスタンスの連携で紹介した各種アノテーションを活用して Load Balancerインスタンスのプロパティを設定するユースケースです。
Kubernetesで作成した NAVERクラウドプラットフォームのロードバランサを Kubernetesの Serviceリソースではなくコンソールや APIを通じて設定する場合、状態の同期に問題が発生します。作成されたロードバランサに関する設定の変更は、必ず Kubernetesで作成された Serviceリソースを変更して行ってください。
ユースケース
ロードバランサの作成時に共通して使用できる設定の例です。
Load Balancer Class選択のユースケース
Kubernetes 1.27バージョン以降から LoadBalancerClassを指定することができます。LoadBalancerClassを指定することで NAVERクラウドプラットフォームが提供するロードバランサ以外のロードバランサをクラスタで使用できます。これにより、LoadBalancerClassの指定時に Network Load Balancerや Network Proxy Load Balancerは作成されません。サービスの作成後には、割り当てられた External-IPを確認し、外部からアクセスできることを確認する必要があります。下記の例は、loxilbを Load BalancerClassに指定して使用する方法を説明します。
apiVersion: v1
kind: Service
metadata:
name: my-nginx
labels:
app: nginx
spec:
selector:
app: nginx
ports:
- port: 8765
targetPort: 80
type: LoadBalancer
loadBalancerClass: "loxilb.io/loxilb"
インスタンスが作成される専用サブネット選択のユースケース
インスタンスの作成時、kube-systemNamespaceで ncloud-configという名前の configmap内の lbSubnetNoをデフォルトで使用します。他のロードバランサ専用のサブネットにインスタンスを作成する必要がある場合は、service.beta.kubernetes.io/ncloud-load-balancer-subnet-id アノテーションを使用できます。
以下は、NPLBインスタンスが作成される専用サブネットを選択するユースケースです。
kind: Service
apiVersion: v1
metadata:
name: my-nginx
annotations:
service.beta.kubernetes.io/ncloud-load-balancer-layer-type: "nplb"
service.beta.kubernetes.io/ncloud-load-balancer-subnet-id: "452772"
spec:
ports:
- port: 80
targetPort: 80
selector:
run: my-nginx
type: LoadBalancer
ロードバランサのパブリック IPアドレス付与のユースケース
LoadBalancer タイプの Serviceの場合、spec.loadBalancerIP フィールドにロードバランサに割り当てるパブリック IPアドレスを定義できます。このフィールドには NAVERクラウドプラットフォームコンソール > VPC > Public IPメニューから確認できる未割り当てのパブリック IPアドレスのみ記述できます。
基本的にロードバランサを削除すると、割り当てられたパブリック IPアドレスも一緒に返却されます。パブリック IPアドレスが一緒に返却されないように service.beta.kubernetes.io/ncloud-load-balancer-retain-public-ip-on-termination: "true" annotationを使用できます。
apiVersion: v1
kind: Service
metadata:
name: my-nginx
annotations:
service.beta.kubernetes.io/ncloud-load-balancer-layer-type: "nplb"
service.beta.kubernetes.io/ncloud-load-balancer-retain-public-ip-on-termination: "true"
spec:
loadBalancerIP: 110.234.194.181
ports:
- port: 80
targetPort: 8080
protocol: TCP
name: http
selector:
run: nginx
type: LoadBalancer
プライベートネットワークタイプのロードバランサ作成のユースケース
service.beta.kubernetes.io/ncloud-load-balancer-internal アノテーションを用いて、VPC内部でのみアクセスできるプライベートタイプのロードバランサを作成できます。このアノテーションのデフォルト値は falseなので、明示的に指定しないとパブリックタイプのロードバランサが作成されます。プライベートタイプのロードバランサは、VPC内部のプライベート IPアドレスを利用して内部サーバ間の負荷を分散処理し、VPC外部からのアクセスは許可されません。
apiVersion: v1
kind: Service
metadata:
name: my-nginx
annotations:
service.beta.kubernetes.io/ncloud-load-balancer-layer-type: "nplb"
service.beta.kubernetes.io/ncloud-load-balancer-internal: "true"
spec:
ports:
- port: 80
targetPort: 80
selector:
run: my-nginx
type: LoadBalancer
負荷分散アルゴリズム設定のユースケース
service.beta.kubernetes.io/ncloud-load-balancer-algorithm-type-codeアノテーションを用いて、ロードバランサの負荷分散アルゴリズムを設定することができます。Network Proxy LoadBalancerの場合は Round Robin(RR)、Source Ip Hash(SIPHS)、Least Connection(LC)の中から選択でき、Network LoadBalancerの場合は Hash(MH)、Round Robin(RR)の中から選択できます。
以下は、Network Proxy LoadBalancerを作成しながら、負荷分散アルゴリズムとして Source Ip Hash(SIPHS)を選択する例です。
apiVersion: v1
kind: Service
metadata:
name: my-nginx
annotations:
service.beta.kubernetes.io/ncloud-load-balancer-layer-type: "nplb"
service.beta.kubernetes.io/ncloud-load-balancer-algorithm-type-code: "SIPHS"
spec:
ports:
- port: 80
targetPort: 80
selector:
run: my-nginx
type: LoadBalancer
Access Control List設定のユースケース
service.beta.kubernetes.io/ncloud-load-balancer-listener-acl-id.{port}: {aclId} アノテーションを使用してロードバランサリスナー別に Access Control Listを設定できます。
以下は、そのアノテーションを用いて Access Control Listを設定するユースケースです。
kind: Service
apiVersion: v1
metadata:
name: my-nginx
annotations:
service.beta.kubernetes.io/ncloud-load-balancer-listener-acl-id.80: "123"
spec:
ports:
- port: 80
targetPort: 80
selector:
run: my-nginx
type: LoadBalancer
ネットワークプロキシロードバランサ(NPLB)プロパティ設定のユースケース
ネットワークプロキシロードバランサ(NPLB)インスタンス作成のユースケース
service.beta.kubernetes.io/ncloud-load-balancer-layer-typeアノテーションを用いて、NetworkProxyLoadBalancerインスタンスを作成できます。以下は NetworkProxyLoadBalancerインスタンス作成のユースケースです。
kind: Service
apiVersion: v1
metadata:
name: my-nginx
annotations:
service.beta.kubernetes.io/ncloud-load-balancer-layer-type: "nplb"
service.beta.kubernetes.io/ncloud-load-balancer-internal: "true"
service.beta.kubernetes.io/ncloud-load-balancer-size: "SMALL"
spec:
ports:
- port: 80
targetPort: 80
selector:
run: my-nginx
type: LoadBalancer
ロードバランサの負荷処理性能設定のユースケース
service.beta.kubernetes.io/ncloud-load-balancer-size アノテーションを用いて作成したロードバランサの負荷処理性能を設定できます。
以下は、そのアノテーションを用いて負荷処理性能を設定するユースケースです。
kind: Service
apiVersion: v1
metadata:
name: my-nginx
annotations:
service.beta.kubernetes.io/ncloud-load-balancer-layer-type: "nplb"
service.beta.kubernetes.io/ncloud-load-balancer-size: "MEDIUM"
spec:
ports:
- port: 80
targetPort: 80
selector:
run: my-nginx
type: LoadBalancer
TLS設定のユースケース
サービス明細を通じて、TLS/SSL証明書をロードバランサに適用できます。Certificate Managerに登録された証明書番号(nrn)を service.beta.kubernetes.io/ncloud-load-balancer-ssl-certificate-noに指定し、TLSを使用するポート番号を service.beta.service.beta.kubernetes.io/ncloud-load-balancer-tls-portsアノテーションに設定します。以下は、443ポート(HTTPS)に入るトラフィックを暗号化して80ポート(HTTP)に転送するユースケースです。
kind: Service
apiVersion: v1
metadata:
name: my-nginx
annotations:
service.beta.kubernetes.io/ncloud-load-balancer-ssl-certificate-no: "1234"
service.beta.kubernetes.io/ncloud-load-balancer-tls-ports: "443"
spec:
ports:
- port: 443
targetPort: 80
selector:
app: nginx
type: LoadBalancer
プロキシプロトコル有効化のユースケース
service.beta.kubernetes.io/ncloud-load-balancer-proxy-protocol アノテーションにより、ロードバランサのプロキシプロトコルを有効にすることができます。プロキシプロトコルは、TCPや SSLプロトコルを使用する際に、プロキシ環境を通じて接続リクエストをするクライアントのソース IPアドレス(Original Client IP address)を知ることができるプロトコルです。この機能を使うためには、ロードバランサだけでなく、接続されたアプリケーション(Pod)でも関連設定をする必要があります。
kind: Service
apiVersion: v1
metadata:
name: my-nginx
annotations:
service.beta.kubernetes.io/ncloud-load-balancer-layer-type: "nplb"
service.beta.kubernetes.io/ncloud-load-balancer-proxy-protocol: "true"
spec:
ports:
- port: 80
targetPort: 80
selector:
run: my-nginx
type: LoadBalancer
ロードバランサ Idle Timeout設定のユースケース
service.beta.kubernetes.io/ncloud-load-balancer-idle-timeout により、ロードバランサの Idle Timeoutを調整することができます。アプリケーションの Idle Timeoutを考慮して調整する必要があり、ロードバランサのデフォルト値は60秒です。以下の例は、ロードバランサの Idle Timeout値を90秒に設定する方法を示しています。
kind: Service
apiVersion: v1
metadata:
name: my-nginx
annotations:
service.beta.kubernetes.io/ncloud-load-balancer-layer-type: "nplb"
service.beta.kubernetes.io/ncloud-load-balancer-idle-timeout: "90"
spec:
ports:
- port: 80
targetPort: 80
selector:
run: my-nginx
type: LoadBalancer
ネットワークロードバランサ(NLB)プロパティ設定のユースケース
ネットワークロードバランサ(NLB)インスタンス作成のユースケース
service.beta.kubernetes.io/ncloud-load-balancer-layer-typeアノテーションを用いて、NetworkLoadBalancerインスタンスを作成できます。以下は NetworkLoadBalancerインスタンス作成のユースケースです。
kind: Service
apiVersion: v1
metadata:
name: my-nginx
annotations:
service.beta.kubernetes.io/ncloud-load-balancer-layer-type: "nlb"
service.beta.kubernetes.io/ncloud-load-balancer-internal: "true"
service.beta.kubernetes.io/ncloud-load-balancer-size: "SMALL"
spec:
ports:
- port: 80
targetPort: 80
selector:
run: my-nginx
type: LoadBalancer
ロードバランサの作成時、ACGルールの Inbound Source設定のユースケース
Serviceタイプが LoadBalancerの場合、外部との通信のために Inbound Sourceに 0.0.0.0./0の ACGルールがデフォルトで設定されます。他の IP Blockをアクセスソースとして設定する場合は、service.beta.kubernetes.io/ncloud-load-balancer-inbound-sourceのアノテーションを使用できます。複数の Inbound Sourceを設定する場合は、コンマ(,)で区切って入力できます。
以下は、NLBインスタンス作成時に ACGルールの Inbound Sourceを設定するユースケースです。
kind: Service
apiVersion: v1
metadata:
name: my-nginx
annotations:
service.beta.kubernetes.io/ncloud-load-balancer-layer-type: "nlb"
service.beta.kubernetes.io/ncloud-load-balancer-inbound-source: "10.120.0.0/16,143.248.12.77/32"
spec:
ports:
- port: 80
targetPort: 80
selector:
run: my-nginx
type: LoadBalancer
ロードバランサ作成時 UDP設定のユースケース
Network LoadBalancerは UDPプロトコルをリスナーとして使用できます。NLBインスタンスの作成時、UDPリスナーを設定する例は次の通りです。
- UDPプロトコルをリスナーに使用してもターゲットグループのヘルスチェックは TCPで行うため、Kubernetesサービスリソースに TCPポートが開かれている必要があります。
- UDPポートと TCPポートが同じ場合には、別途設定は必要ありません。
- UDPポートと TCPポートが異なる場合には、アノテーションを通じてヘルスチェックポートを明示的に指定する必要があります。
- 制限事項によりロードバランサには TCPリスナーも一緒に作成されます。
- UDPと TCPポートが同じ場合
- アノテーションを使用しない
apiVersion: v1
kind: Service
metadata:
name: udp-service
annotations:
service.beta.kubernetes.io/ncloud-load-balancer-layer-type: "nlb"
spec:
selector:
app: udp-service
ports:
- name: tcp
port: 80
protocol: TCP
nodePort: 30080
- name: udp
port: 80
protocol: UDP
nodePort: 30080
type: LoadBalancer
- UDPと TCPポートが同じでない場合
- アノテーションを通じてヘルスチェックポートの指定必要
apiVersion: v1
kind: Service
metadata:
name: udp-service
annotations:
service.beta.kubernetes.io/ncloud-load-balancer-layer-type: "nlb"
service.beta.kubernetes.io/ncloud-load-balancer-healthcheck-port.90: "85" #ポート90のヘルスチェックはポート85のノードポートを使用
spec:
selector:
app: udp-service
ports:
- name: tcp
port: 85
targetPort: 80
protocol: TCP
nodePort: 30091
- name: udp
port: 90
targetPort: 90
protocol: UDP
nodePort: 30090
type: LoadBalancer