ALB Ingress Controller の設定

Prev Next

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をインストールして準備する方法は、次の通りです。

  1. 以下のリージョンに該当するコマンドを実行し、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をインストールします。
  2. 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
    Default Ruleはマッチングされる Ruleがない場合に適用される Ruleで、spec.defaultBackendに設定できます。
    別途の ruleと use-annotationは設定できず、設定しなかった場合は80ポートに設定されたデフォルトのターゲットグループが作成されます。
  • 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のプロトコルとポート設定リスト。
使用可能なプロトコル: HTTP、HTTPS
alb.ingress.kubernetes.io/description Automatically Created By NKS Ingress ロードバランサのメモ
alb.ingress.kubernetes.io/ssl-certificate-no N/A Ingress プロトコルが HTTPSのリスナーに適用する Certificate Managerの証明書番号。コンマ区切り文字による複数証明書登録が可能。
(証明書番号は Resource Managerの nrnで確認可能)
(例: nrn:PUB:CertificateManager::000:Certificate/External/${certificateNo})
alb.ingress.kubernetes.io/ssl-min-version TLSV10 Ingress TLS Protocolバージョン
-設定可能なバージョンと値
TLS v1.0: TLSV10
TLS v1.1: TLSV11
TLS v1.2: TLSV12
TLS v1.3: TLSV13
alb.ingress.kubernetes.io/enable-http2 false Ingress プロトコルが HTTPSであるリスナーの HTTP/2の有効化有無
alb.ingress.kubernetes.io/cipher-suite-list リスナーでサポートするすべての cipher suite Ingress リスナーでサポートする Cipher Suiteリスト
(例: ["TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"])
alb.ingress.kubernetes.io/load-balancer-size small Ingress ロードバランサの負荷処理性能の設定
設定可能な値: small、medium、large、xlarge
alb.ingress.kubernetes.io/idle-timeout 60 Ingress ロードバランサの Idle Timeout設定
alb.ingress.kubernetes.io/network-type public Ingress ロードバランサのネットワークタイプの設定(作成時のみ使用)
プライベート: private、パブリック: public
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 ロードバランサ名(作成時のみ適用)
名前命名ルール: 長さ3 ~ 30文字、英数字/「-」のみ許可、英字で始まる
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のロードバランシングアルゴリズムの設定
設定可能な値: round-robin、least-connection、source-ip-hash
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のプロトコル
HTTP, HTTPS
alb.ingress.kubernetes.io/backend-protocol HTTP Ingress, Service Target Groupのプロトコル
HTTP, HTTPS
alb.ingress.kubernetes.io/enable-sticky-session false Ingress, Service Target Groupの Sticky Session設定
  • 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を定義
設定可能な値は targetGroupredirection
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の有効化有無
デフォルト値: false
redirection object actionの typeを redirectionに設定した場合に使用
redirection.host string デフォルト値: #{host}
redirection.path string デフォルト値: /#{path}
redirection.query string デフォルト値: #{query}
redirection.port string redirectionポート
デフォルト値: #{port}
redirection.protocol string 設定可能なプロトコル: HTTP、HTTPS
デフォルト値: #{protocol}
redirection.statusCode number 設定可能なコード: 301、302
  • alb.ingress.kubernetes.io/conditions.${conditionName}: conditions モデルに適した JSON形式の stringで作成し、Ingressで定義された Host、Path条件以外に他の条件を追加で設定できます。当該条件は、Ingress Ruleで ${conditionName}と一致する serviceNameを持つ Serviceに適用されます。
プロパティ タイプ 説明
field string 追加する条件を定義
設定可能な値は hostHeaderpathPatternhttpHeader
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値のリスト

サンプルコード

ALB Ingress Controllerの詳細なユースケースは、ALB Ingress Controller のユースケースをご参照ください。