VPC環境で利用できます。
ALB Ingress Controllerを用いて Kubernetes Ingressを Load Balancerと連携し、トラフィックをルーティングできます。
Kubernetesシステムで Ingressが作成されると ALB Ingress Controllerは Ingressに設定された値を活用して Load Balancerインスタンスを作成します。インスタンスが作成されると、Ingress Ruleで設定した Serviceのノードポートをポート値として使用し、ターゲットグループを作成してインスタンスに登録します。
- Kubernetesで作成された NAVERクラウドプラットフォームの Load Balancerは Kubernetesのリソースとして管理します。
- Load Balancerをコンソールや APIを通じて変更する場合、Kubernetesとのステータス同期が正常に行われないため、予期せぬ問題が発生することがあります。Load Balancer設定変更が必要な場合、必ず Kubernetesリソースを変更する方式で行います。
- コンソールまたは APIを用いた直接変更によって発生した問題には、テクニカルサポートを提供しません。
ALB Ingress Controllerのインストール
クラスタに ALB Ingress Controllerをインストールして準備する方法は、次の通りです。
-
以下のリージョンに該当するコマンドを実行し、ALB Ingress Controllerをインストールします。
参考ハイパーバイザが KVMであるクラスタは ALB Ingress Controllerを基本的に含めているため、別途インストールせずにすぐ使用できます。
- kube-systemの名前空間に alb-ingress-controllerが作成され、必要な ServiceAccount、ClusterRole、ClusterRoleBinding、IngressClassが一緒に作成されます。
-
韓国
kubectl --kubeconfig=$KUBE_CONFIG apply -f https://raw.githubusercontent.com/NaverCloudPlatform/nks-alb-ingress-controller/main/docs/install/pub/install.yaml- Kubernetes 1.19バージョン未満の場合、 https://raw.githubusercontent.com/NaverCloudPlatform/nks-alb-ingress-controller/v0.3.1/docs/install/pub/install.yamlをインストールします。
-
シンガポール
kubectl --kubeconfig=$KUBE_CONFIG apply -f https://raw.githubusercontent.com/NaverCloudPlatform/nks-alb-ingress-controller/main/docs/install/pub-sg/install.yaml- Kubernetes 1.19バージョン未満の場合、 https://raw.githubusercontent.com/NaverCloudPlatform/nks-alb-ingress-controller/v0.3.1/docs/install/pub-sg/install.yamlをインストールします。
-
日本
kubectl --kubeconfig=$KUBE_CONFIG apply -f https://raw.githubusercontent.com/NaverCloudPlatform/nks-alb-ingress-controller/main/docs/install/pub-jp/install.yaml- Kubernetes 1.19バージョン未満の場合、 https://raw.githubusercontent.com/NaverCloudPlatform/nks-alb-ingress-controller/v0.3.1/docs/install/pub-jp/install.yamlをインストールします。
-
ALB Ingress Controllerが正常に Runningステータスであることを確認します。
kubectl --kubeconfig=$KUBE_CONFIG get pods -n kube-system -l app.kubernetes.io/name=alb-ingress-controller
- Ingressのリソースに spec.ingressClassName: albフィールドを追加します。
- Kubernetes 1.19 バージョン未満の場合、kubernetes.io/ingress.class: albのアノテーションを追加します。
ALB Ingress Controllerの設定とアノテーション
ALB Ingress Controllerの基本設定
ALB Ingress Controllerのデフォルト設定は、次の通りです。
- Service type: NodePort
- Ingressを通じて公開する Serviceはすべて NodePort typeで作成する必要があります。
- Default Rule
- マッチングされる Ruleがない場合に適用される Ruleで、
spec.defaultBackendに設定できます。 - 別途の ruleと use-annotationは設定できず、設定しなかった場合は80ポートに設定されたデフォルトのターゲットグループが作成されます。
- マッチングされる Ruleがない場合に適用される Ruleで、
- Rule Priority
- Ingressで定義した Ruleの順序に沿って優先順位が決まります。トップにある Ruleの優先順位が1に設定されます。
ALB Ingress Controllerのアノテーション
Kubernetes Ingressと Serviceオブジェクトに、アノテーションを使用して設定を変更できます。
以下の表を参照して必要なアノテーションを使用します。ALB Ingress Controllerのアノテーションはすべて alb.ingress.kubernetes.io/で始まります。
| アノテーション | デフォルト値 | 適用リソース | 説明 |
|---|---|---|---|
alb.ingress.kubernetes.io/listen-ports |
[{"HTTP":80}] (証明書番号が設定されている場合は[{"HTTPS":443}]) | Ingress | Listenerのプロトコルとポート設定リスト
|
alb.ingress.kubernetes.io/description |
Automatically Created By NKS | Ingress | ロードバランサのメモ |
alb.ingress.kubernetes.io/ssl-certificate-no |
N/A | Ingress | プロトコルが HTTPSのリスナーに適用する Certificate Managerの証明書番号
|
alb.ingress.kubernetes.io/ssl-min-version |
TLSV10 | Ingress | TLS Protocolバージョン
|
alb.ingress.kubernetes.io/enable-http2 |
false | Ingress | プロトコルが HTTPSであるリスナーの HTTP/2の有効化有無 |
alb.ingress.kubernetes.io/cipher-suite-list |
リスナーでサポートするすべての cipher suite | Ingress | リスナーでサポートする Cipher Suiteリスト
|
alb.ingress.kubernetes.io/load-balancer-size |
small | Ingress | ロードバランサの負荷処理性能設定
|
alb.ingress.kubernetes.io/idle-timeout |
60 | Ingress | ロードバランサの Idle Timeout設定 |
alb.ingress.kubernetes.io/network-type |
public | Ingress | ロードバランサのネットワークタイプの設定(作成時のみ使用)
|
alb.ingress.kubernetes.io/public-ip-instance-no |
N/A | Ingress | パブリック IPアドレスのインスタンス番号 |
alb.ingress.kubernetes.io/ncloud-load-balancer-retain-public-ip-on-termination |
false | Ingress | ロードバランサ返却時のパブリック IPアドレスの保存有無 |
alb.ingress.kubernetes.io/subnet-id |
kube-system configmap(ncloud-config)のlbSubnetNo値 |
Ingress | ロードバランサを作成するためのロードバランサ専用サブネットの ID値(作成時にのみ使用) |
alb.ingress.kubernetes.io/actions.${actionName} |
N/A | Ingress | Listener Ruleの機能を使用するための設定(下段の説明を参照) |
alb.ingress.kubernetes.io/conditions.${conditionName} |
N/A | Ingress | Ingress Ruleの Host、Path条件に追加条件を適用するための設定(下段の説明を参照) |
alb.ingress.kubernetes.io/enable-access-log |
false | Ingress | アクセスログ収集の設定(Cloud Log Analyticsサービスご利用の申し込みが必要) |
alb.ingress.kubernetes.io/load-balancer-name |
N/A | Ingress | ロードバランサ名(作成時のみ適用)
|
alb.ingress.kubernetes.io/ssl-redirect |
N/A | Ingress | SSL Redirect対象ポートの設定 |
alb.ingress.kubernetes.io/listener-acl-id.{port} |
N/A | Ingress | リスナーに適用する ACL ID |
alb.ingress.kubernetes.io/algorithm-type |
round-robin | Ingress, Service | Target Groupのロードバランシングアルゴリズムの設定
|
alb.ingress.kubernetes.io/unhealthy-threshold-count |
2 | Ingress, Service | Health Check失敗のしきい値 |
alb.ingress.kubernetes.io/healthy-threshold-count |
2 | Ingress, Service | Health Check成功のしきい値 |
alb.ingress.kubernetes.io/healthcheck-port |
TargetGroupのポート | Ingress, Service | Health Checkのポート |
alb.ingress.kubernetes.io/healthcheck-path |
'/' | Ingress, Service | Health Check URLパス |
alb.ingress.kubernetes.io/healthcheck-interval-seconds |
30 | Ingress, Service | Health Checkの周期(秒) |
alb.ingress.kubernetes.io/healthcheck-protocol |
HTTP | Ingress, Service | Health Checkのプロトコル
|
alb.ingress.kubernetes.io/backend-protocol |
HTTP | Ingress, Service | Target Groupのプロトコル
|
alb.ingress.kubernetes.io/enable-sticky-session |
false | Ingress, Service | Target Groupの Sticky Session設定 |
alb.ingress.kubernetes.io/enable-acl-operator |
false | Ingress, Service | ACL関連機能の ACL-operatorへの委任有無
|
alb.ingress.kubernetes.io/actions.${actionName}:actionsモデルに合わせて JSON形式の stringで作成し、Listener Ruleの追加機能を設定できます。Ingressに設定された Ruleの service.nameを使用する${actionName}に設定し、service.port.nameを use-annotationに設定するとアノテーションが適用されます。
| プロパティ | タイプ | 説明 |
|---|---|---|
type |
string | actionの typeを定義
|
targetGroup |
object | actionの typeを targetGroupに設定した場合に使用 |
targetGroup.targetGroups |
array | トラフィックを転送する Serviceのリスト |
targetGroup.targetGroups[n].serviceName |
string | service name |
targetGroup.targetGroups[n].servicePort |
number | service port |
targetGroup.enableStickySession |
boolean | sticky sessionの有効化有無
|
redirection |
object | actionの typeを redirectionに設定した場合に使用 |
redirection.host |
string | デフォルト値: #{host} |
redirection.path |
string | デフォルト値: /#{path} |
redirection.query |
string | デフォルト値: #{query} |
redirection.port |
string | redirectionポート |
redirection.protocol |
string | 設定可能なプロトコル: HTTP, HTTPS
|
redirection.statusCode |
number | 設定可能なコード: 301, 302 |
alb.ingress.kubernetes.io/conditions.${conditionName}:conditionsモデルに適した JSON形式の stringで作成し、Ingressで定義された Host、Path条件以外に他の条件を追加で設定できます。当該条件は、Ingress Ruleで${conditionName}と一致する serviceNameを持つ Serviceに適用されます。
| プロパティ | タイプ | 説明 |
|---|---|---|
field |
string | 追加する条件を定義
|
hostHeader |
object | conditionの fieldを hostHeaderに設定した場合に使用 |
hostHeader.values |
array | hostリスト |
hostHeader.values[n] |
string | host値 |
pathPattern |
object | conditionの fieldを pathPatternに設定した場合に使用 |
pathPattern.values |
array | pathリスト |
pathPattern.values[n] |
string | path値 |
httpHeader |
object | conditionの fieldを httpHeaderに設定した場合に使用 |
httpHeader.key |
string | header key値 |
httpHeader.values |
array | header value値のリスト |
マルチゾーン Subnet IDを指定
マルチゾーンクラスタで ALBを作成する場合、各ゾーンのロードバランサ専用 Subnet IDを alb.ingress.kubernetes.io/subnet-id アノテーションに入力できます。マルチゾーンクラスタで Subnet IDを指定する場合、以下の内容をご参照ください。
- 2つ以上を入力する場合、コンマ(,)で区切ります。
- 各ゾーンごとにロードバランサ専用サブネットは、1つのみ指定できます。
- 同じゾーンに属する Subnet IDを2つ以上入力すると、ALB作成に失敗します。
subnet-id値は ALBを作成する場合のみ適用されます。作成された ALBのサブネットを変更するには、ALBを再度作成します。- マルチゾーンサブネットを指定する場合、パブリック IPアドレスを指定して割り当てられません。
metadata:
annotations:
alb.ingress.kubernetes.io/subnet-id: "123456,234567"
ロードバランサ管理を一時停止
lb.ncloud.naver.com/pause: "true"は Kubernetes 1.36以上の KVMクラスタで使用できる一時停止オプションです。この値が設定されると、コントローラの spec/provider reconcileが一時停止されます。
| 適用対象 | 動作 |
|---|---|
| Ingress |
|
pauseは既に作成された Ncloud LB/TGを保存するためのオプションです。pauseステータスでは欠落した Load Balancerリソースを新しく作成しません。変更反映を再開するには、入力リソースで pauseアノテーションを削除します。
サンプルコード
ALB Ingress Controllerの詳細なユースケースは、ALB Ingress Controller のユースケースをご参照ください。