ALB Ingress Controller の設定
    • PDF

    ALB Ingress Controller の設定

    • PDF

    Article Summary

    VPC環境で利用できます。

    ALB Ingress Controllerを用いて Kubernetes Ingressを Load Balancerと連携し、トラフィックをルーティングできます。

    Kubernetesシステムで Ingressが作成されると ALB Ingress Controllerは Ingressに設定された値を活用して Load Balancerインスタンスを作成します。インスタンスが作成されると、Ingress Ruleで設定した Serviceのノードポートをポート値として使用し、ターゲットグループを作成してインスタンスに登録します。

    注意

    Kubernetesで作成した NAVERクラウドプラットフォームのロードバランサを Kubernetesの Ingressリソースではなくコンソールと APIを通じて設定する場合、状態の同期に問題が発生する場合があります。作成されたロードバランサに関する設定の変更は、必ず Kubernetesで作成された Ingressリソースを変更して行ってください。

    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/ja/install/pub/install.yaml
        
        • Kubernetes 1.19バージョン未満の場合、 https://raw.githubusercontent.com/NaverCloudPlatform/nks-alb-ingress-controller/v0.3.1/docs/ja/install/pub/install.yamlをインストールします。
      • シンガポール

        kubectl --kubeconfig=$KUBE_CONFIG apply -f https://raw.githubusercontent.com/NaverCloudPlatform/nks-alb-ingress-controller/main/docs/ja/install/pub-sg/install.yaml
        
        • Kubernetes 1.19バージョン未満の場合、 https://raw.githubusercontent.com/NaverCloudPlatform/nks-alb-ingress-controller/v0.3.1/docs/ja/install/pub-sg/install.yamlをインストールします。
      • 日本

        kubectl --kubeconfig=$KUBE_CONFIG apply -f https://raw.githubusercontent.com/NaverCloudPlatform/nks-alb-ingress-controller/main/docs/ja/install/pub-jp/install.yaml
        
        • Kubernetes 1.19バージョン未満の場合、 https://raw.githubusercontent.com/NaverCloudPlatform/nks-alb-ingress-controller/v0.3.1/docs/ja/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}])IngressListenerのプロトコルとポート設定リスト。
    使用可能なプロトコル: HTTP、HTTPS
    alb.ingress.kubernetes.io/descriptionAutomatically Created By NKSIngressロードバランサのメモ
    alb.ingress.kubernetes.io/ssl-certificate-noN/AIngressプロトコルが HTTPSのリスナーに適用する Certificate Managerの証明書番号。コンマ区切り文字による複数証明書登録が可能。
    (証明書番号は Resource Managerの nrnで確認可能)
    (例: nrn:PUB:CertificateManager::000:Certificate/External/${certificateNo})
    alb.ingress.kubernetes.io/ssl-min-versionTLSV10IngressTLS Protocolバージョン
    -設定可能なバージョンと値
    TLS v1.0: TLSV10
    TLS v1.1: TLSV11
    TLS v1.2: TLSV12
    alb.ingress.kubernetes.io/enable-http2falseIngressプロトコルが HTTPSであるリスナーの HTTP/2の有効化有無
    alb.ingress.kubernetes.io/cipher-suite-listリスナーでサポートするすべての cipher suiteIngressリスナーでサポートする 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-sizesmallIngressロードバランサの負荷処理性能の設定
    設定可能な値: small、medium、large
    alb.ingress.kubernetes.io/idle-timeout60Ingressロードバランサの Idle Timeout設定
    alb.ingress.kubernetes.io/network-typepublicIngressロードバランサのネットワークタイプの設定(作成時のみ使用)
    プライベート: private、パブリック: public
    alb.ingress.kubernetes.io/public-ip-instance-noN/AIngressパブリック IPアドレスのインスタンス番号
    alb.ingress.kubernetes.io/ncloud-load-balancer-retain-public-ip-on-terminationfalseIngressロードバランサ返却時のパブリック IPアドレスの保存有無
    alb.ingress.kubernetes.io/subnet-idkube-system configmap(ncloud-config)lbSubnetNoIngressロードバランサを作成するためのロードバランサ専用サブネットの ID値(作成時にのみ使用)
    alb.ingress.kubernetes.io/actions.${actionName}N/AIngressListener Ruleの機能を使用するための設定(下段の説明を参照)
    alb.ingress.kubernetes.io/conditions.${conditionName}N/AIngressIngress Ruleの Host、Path条件に追加条件を適用するための設定(下段の説明を参照)
    alb.ingress.kubernetes.io/enable-access-logfalseIngressアクセスログ収集の設定(Cloud Log Analyticsサービスご利用の申し込みが必要)
    alb.ingress.kubernetes.io/load-balancer-nameN/AIngressロードバランサ名(作成時のみ適用)
    名前命名ルール: 長さ3 ~ 30文字、英数字/「-」のみ許可、英字で始まる
    alb.ingress.kubernetes.io/ssl-redirectN/AIngressSSL Redirect対象ポートの設定
    alb.ingress.kubernetes.io/algorithm-typeround-robinIngress, ServiceTarget Groupのロードバランシングアルゴリズムの設定
    設定可能な値: round-robin、least-connection、source-ip-hash
    alb.ingress.kubernetes.io/unhealthy-threshold-count2Ingress, ServiceHealth Check失敗のしきい値
    alb.ingress.kubernetes.io/healthy-threshold-count2Ingress, ServiceHealth Check成功のしきい値
    alb.ingress.kubernetes.io/healthcheck-portTargetGroupのポートIngress, ServiceHealth Checkのポート
    alb.ingress.kubernetes.io/healthcheck-path'/'Ingress, ServiceHealth Check URLパス
    alb.ingress.kubernetes.io/healthcheck-interval-seconds30Ingress, ServiceHealth Checkの周期(秒)
    alb.ingress.kubernetes.io/healthcheck-protocolHTTPIngress, ServiceHealth Checkのプロトコル
    HTTP, HTTPS
    alb.ingress.kubernetes.io/backend-protocolHTTPIngress, ServiceTarget Groupのプロトコル
    HTTP, HTTPS
    alb.ingress.kubernetes.io/enable-sticky-sessionfalseIngress, ServiceTarget Groupの Sticky Session設定
    • alb.ingress.kubernetes.io/actions.${actionName}: actionsモデルに合わせて JSON形式の stringで作成し、Listener Ruleの追加機能を設定できます。Ingressに設定された Ruleの service.nameを使用しようとする ${actionName}に設定し、service.port.nameを use-annotationに設定するとアノテーションが適用されます。
    プロパティタイプ説明
    typestringactionの typeを定義
    設定可能な値は targetGroupredirection
    targetGroupobjectactionの typeを targetGroupに設定した場合に使用
    targetGroup.targetGroupsarrayトラフィックを転送する Serviceのリスト
    targetGroup.targetGroups[n].serviceNamestringservice name
    targetGroup.targetGroups[n].servicePortnumberservice port
    targetGroup.enableStickySessionbooleansticky sessionの有効化有無
    デフォルト値: false
    redirectionobjectactionの typeを redirectionに設定した場合に使用
    redirection.hoststringデフォルト値: #{host}
    redirection.pathstringデフォルト値: /#{path}
    redirection.querystringデフォルト値: #{query}
    redirection.portstringredirectionポート
    デフォルト値: #{port}
    redirection.protocolstring設定可能なプロトコル: HTTP、HTTPS
    デフォルト値: #{protocol}
    redirection.statusCodenumber設定可能なコード: 301、302
    • alb.ingress.kubernetes.io/conditions.${conditionName}: conditionsモデルに適した JSON形式の stringで作成し、Ingressで定義された Host、Path条件以外に他の条件を追加で設定できます。当該条件は、Ingress Ruleで ${conditionName}と一致する serviceNameを持つ Serviceに適用されます。
    プロパティタイプ説明
    fieldstring追加する条件を定義
    設定可能な値は hostHeaderpathPatternhttpHeader
    hostHeaderobjectconditionの fieldを hostHeaderに設定した場合に使用
    hostHeader.valuesarrayhostリスト
    hostHeader.values[n]stringhost値
    pathPatternobjectconditionの fieldを pathPatternに設定した場合に使用
    pathPattern.valuesarraypathリスト
    pathPattern.values[n]stringpath値
    httpHeaderobjectconditionの fieldを httpHeaderに設定した場合に使用
    httpHeader.keystringheader key値
    httpHeader.valuesarrayheader value値のリスト

    サンプルコード

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


    この記事は役に立ちましたか?

    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.