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をインストールします。

      • 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追加する条件を定義
    設定可能な値はhostHeaderpathPattern
    hostHeaderobjectconditionの fieldを hostHeaderに設定した場合に使用
    hostHeader.valuesarrayhostリスト
    hostHeader.values[n]stringhost値
    pathPatternobjectconditionの fieldを pathPatternに設定した場合に使用
    pathPattern.valuesarraypathリスト
    pathPattern.values[n]stringpath値

    サンプルコード

    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.