すべてのプロダクト
Search
ドキュメントセンター

Server Load Balancer:自己管理型KubernetesクラスターにALB Ingressコントローラーを使用する権限を付与する

最終更新日:Sep 14, 2024

Application Load Balancer (ALB) Ingressコントローラーは、強力なIngressトラフィック管理機能を提供します。 ALB Ingressコントローラーは、container Service for Kubernetes (ACK) などのコンテナーサービスや自己管理型Kubernetesクラスターで使用できます。 ALB Ingressコントローラーを使用してトラフィックを管理する前に、セルフマネージドKubernetesクラスターにALB Ingressコントローラーの使用を許可する必要があります。

ステップ1: RAMユーザーの作成

  1. Alibaba Cloudアカウントを使用して、Resource Access Management (RAM) コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、[ID] > [ユーザー] を選択します。 表示されるページで、[ユーザーの作成] をクリックします。

  3. [ユーザーの作成] ページで、[ログイン名] および [表示名] パラメーターを設定し、[OpenAPI Access] を選択し、[OK] をクリックします。

  4. [ユーザーの作成] ページで、RAMユーザーのAccessKey IDAccessKey secretをコピーします。

手順2: RAMポリシーを作成し、RAMユーザーにポリシーをアタッチする

  1. ALB Ingressコントローラーを使用するために必要な権限を提供するポリシーを作成します。

    1. RAMコンソールの左側のナビゲーションウィンドウで、[権限] > [ポリシー] を選択します。 ページの右側で、[ポリシーの作成] をクリックします。

    2. [JSON] タブをクリックし、次のコンテンツをコピーしてエディターに貼り付け、[次へ] をクリックしてポリシー情報を編集します。

      サンプルコードの表示

      {
        "Version": "1",
        "Statement": [
          {
            "Action": [
              "ecs:Describe*",
              "ecs:CreateRouteEntry",
              "ecs:DeleteRouteEntry",
              "ecs:CreateNetworkInterface",
              "ecs:DeleteNetworkInterface",
              "ecs:CreateNetworkInterfacePermission",
              "ecs:DeleteNetworkInterfacePermission",
              "ecs:ModifyInstanceAttribute",
              "ecs:AttachKeyPair",
              "ecs:StopInstance",
              "ecs:StartInstance",
              "ecs:ReplaceSystemDisk"
            ],
            "Resource": "*",
            "Effect": "Allow"
          },
          {
            "Action": [
              "slb:Describe*",
              "slb:CreateLoadBalancer",
              "slb:DeleteLoadBalancer",
              "slb:ModifyLoadBalancerInternetSpec",
              "slb:RemoveBackendServers",
              "slb:AddBackendServers",
              "slb:RemoveTags",
              "slb:AddTags",
              "slb:StopLoadBalancerListener",
              "slb:StartLoadBalancerListener",
              "slb:SetLoadBalancerHTTPListenerAttribute",
              "slb:SetLoadBalancerHTTPSListenerAttribute",
              "slb:SetLoadBalancerTCPListenerAttribute",
              "slb:SetLoadBalancerUDPListenerAttribute",
              "slb:CreateLoadBalancerHTTPSListener",
              "slb:CreateLoadBalancerHTTPListener",
              "slb:CreateLoadBalancerTCPListener",
              "slb:CreateLoadBalancerUDPListener",
              "slb:DeleteLoadBalancerListener",
              "slb:CreateVServerGroup",
              "slb:DescribeVServerGroups",
              "slb:DeleteVServerGroup",
              "slb:SetVServerGroupAttribute",
              "slb:DescribeVServerGroupAttribute",
              "slb:ModifyVServerGroupBackendServers",
              "slb:AddVServerGroupBackendServers",
              "slb:ModifyLoadBalancerInstanceSpec",
              "slb:ModifyLoadBalancerInternetSpec",
              "slb:SetLoadBalancerModificationProtection",
              "slb:SetLoadBalancerDeleteProtection",
              "slb:SetLoadBalancerName",
              "slb:ModifyLoadBalancerInstanceChargeType",
              "slb:RemoveVServerGroupBackendServers"
            ],
            "Resource": "*",
            "Effect": "Allow"
          },
          {
            "Action": [
              "nlb:TagResources",
              "nlb:UnTagResources",
              "nlb:ListTagResources",
              "nlb:CreateLoadBalancer",
              "nlb:DeleteLoadBalancer",
              "nlb:GetLoadBalancerAttribute",
              "nlb:ListLoadBalancers",
              "nlb:UpdateLoadBalancerAttribute",
              "nlb:UpdateLoadBalancerAddressTypeConfig",
              "nlb:UpdateLoadBalancerZones",
              "nlb:CreateListener",
              "nlb:DeleteListener",
              "nlb:ListListeners",
              "nlb:UpdateListenerAttribute",
              "nlb:StopListener",
              "nlb:StartListener",
              "nlb:GetListenerAttribute",
              "nlb:GetListenerHealthStatus",
              "nlb:CreateServerGroup",
              "nlb:DeleteServerGroup",
              "nlb:UpdateServerGroupAttribute",
              "nlb:AddServersToServerGroup",
              "nlb:RemoveServersFromServerGroup",
              "nlb:UpdateServerGroupServersAttribute",
              "nlb:ListServerGroups",
              "nlb:ListServerGroupServers",
              "nlb:GetJobStatus"
            ],
            "Resource": "*",
            "Effect": "Allow"
          },
          {
            "Action": [
              "vpc:Describe*",
              "vpc:DeleteRouteEntry",
              "vpc:CreateRouteEntry"
            ],
            "Resource": "*",
            "Effect": "Allow"
          },
          {
            "Action": "ram:CreateServiceLinkedRole",
            "Resource": "*",
            "Effect": "Allow",
            "Condition": {
              "StringEquals": {
                "ram:ServiceName": [
                  "alb.aliyuncs.com",
                  "audit.log.aliyuncs.com",
                  "logdelivery.alb.aliyuncs.com"
                ]
              }
            }
          },
          {
            "Action": [
              "yundun-cert:DescribeSSLCertificateList",
              "yundun-cert:DescribeSSLCertificatePublicKeyDetail",
              "yundun-cert:CreateSSLCertificateWithName",
              "yundun-cert:DeleteSSLCertificate"
            ],
            "Resource": "*",
            "Effect": "Allow"
          },
          {
            "Action": [
              "alb:TagResources",
              "alb:UnTagResources",
              "alb:ListServerGroups",
              "alb:ListServerGroupServers",
              "alb:AddServersToServerGroup",
              "alb:RemoveServersFromServerGroup",
              "alb:ReplaceServersInServerGroup",
              "alb:CreateLoadBalancer",
              "alb:DeleteLoadBalancer",
              "alb:UpdateLoadBalancerAttribute",
              "alb:UpdateLoadBalancerEdition",
              "alb:EnableLoadBalancerAccessLog",
              "alb:DisableLoadBalancerAccessLog",
              "alb:EnableDeletionProtection",
              "alb:DisableDeletionProtection",
              "alb:ListLoadBalancers",
              "alb:GetLoadBalancerAttribute",
              "alb:ListListeners",
              "alb:CreateListener",
              "alb:GetListenerAttribute",
              "alb:UpdateListenerAttribute",
              "alb:ListListenerCertificates",
              "alb:AssociateAdditionalCertificatesWithListener",
              "alb:DissociateAdditionalCertificatesFromListener",
              "alb:DeleteListener",
              "alb:CreateRule",
              "alb:DeleteRule",
              "alb:UpdateRuleAttribute",
              "alb:UpdateRulesAttribute",
              "alb:CreateRules",
              "alb:DeleteRules",
              "alb:ListRules",
              "alb:CreateServerGroup",
              "alb:DeleteServerGroup",
              "alb:UpdateServerGroupAttribute",
              "alb:DescribeZones",
              "alb:CreateAcl",
              "alb:DeleteAcl",
              "alb:ListAcls",
              "alb:AddEntriesToAcl",
              "alb:AssociateAclsWithListener",
              "alb:ListAclEntries",
              "alb:RemoveEntriesFromAcl",
              "alb:DissociateAclsFromListener",
              "alb:EnableLoadBalancerIpv6Internet",
              "alb:DisableLoadBalancerIpv6Internet"
            ],
            "Resource": "*",
            "Effect": "Allow"
          }
        ]
      }
    3. [基本情報] セクションで [名前] を設定し、[OK] をクリックします。

  2. ポリシーをRAMユーザーにアタッチして、RAMユーザーにALB Ingressコントローラーの使用を許可します。

    1. 左側のナビゲーションウィンドウで、[ID] > [ユーザー] を選択します。

    2. [ユーザー] ページで、作成したRAMユーザーを見つけ、[操作] 列の [権限の追加] をクリックします。

    3. [権限の追加] パネルで、[カスタムポリシー] をクリックし、ポリシーを選択し、他のパラメーターのデフォルト設定を維持して、[OK] をクリックします。

手順3: 自己管理クラスターでAccessKey IDとAccessKey secretを設定する

  1. Base64を使用してAccessKey IDとAccessKeyシークレットをエンコードし、エンコードされたAccessKeyペアを取得します。

  2. 次のコマンドを実行して、Base64-encodedのAccessKey IDとAccessKeyシークレットをload-balancer-config ConfigMapに追加し、ConfigMapを保存します。

    vim <load-balancer-config ConfigMap file name> 

    次のコードブロックは、load-balancer-config ConfigMapの例を示しています。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: load-balancer-config
      namespace: kube-system
    data:
      cloud-config.conf: |-
        {
            "Global": {
                "AccessKeyID": "VndV***",              # Specify the Base64-encoded AccessKey ID. 
                "AccessKeySecret": "UWU0NnUyTFdhcG***" # Specify the Base64-encoded AccessKey secret. 
            }
        }
                            
  3. 次のコマンドを実行して、load-balancer-config ConfigMapをデプロイします。

    kubectl apply -f  <load-balancer-config ConfigMap file name> 
  4. 設定を有効にするには、load-balancer-controllerのポッドを再起動します。

    1. 次のコマンドを実行して、load-balancer-controllerのポッドを照会します。

      kubectl get pod -n kube-system|grep load-balancer-controller
    2. 次のコマンドを実行して、load-balancer-controllerのポッドを削除します。

      kubectl delete pod -n kube-system load-balancer-controller-***

      期待される出力:

      pod load-balancer-controller-*** deleted
    3. 次のコマンドを実行して、load-balancer-controller用に再作成されたポッドのステータスを照会します。

      kubectl get pod -n kube-system|grep load-balancer-controller

      期待される出力:

      load-balancer-controller-0o9s***     1/1    Running   0    10s

関連ドキュメント

セルフマネージドKubernetesクラスターでALB Ingressコントローラーを使用する方法の詳細については、以下のトピックを参照してください。