Load Balancer Access Control List の連携

Prev Next

VPC環境で利用できます。

KVMベースの Ncloud Kubernetes Serviceを利用する場合、Load Balancer Access Control List(ACL)を Kubernetesの Custom Resource Definitionを通じて宣言的に管理できます。これにより、Kubernetesにリリースされた Serviceと Ingressに ACLを適用し、Subnetへのアクセスを制御できます。NCloud Kubernetes Service 1.34バージョンから利用可能です。

注意
  • ACL機能を活用するためには、ACLが登録される Serviceで service.beta.kubernetes.io/ncloud-load-balancer-enable-acl-operator、または Ingressで alb.ingress.kubernetes.io/enable-acl-operator 設定が "true"に指定されている必要があります。当該 annotationが設定されていない場合、ステータス同期が正常に行われない可能性があります。

Ncloud Kubernetes Serviceと連携する Load Balancerインスタンスへの ACL適用ユースケース

ACLを Ncloud Kubernetes Serviceと連携する Load Balancerインスタンスに適用するには、Load Balancerタイプの Serviceオブジェクトを作成する必要があります。以下のコードをコピーして service.yamlファイルとして保存します。

apiVersion: v1
kind: Service
metadata:
  name: test-lb
  annotations:
    service.beta.kubernetes.io/ncloud-load-balancer-enable-acl-operator: "true"
spec:
  type: LoadBalancer
  selector:
    app: test-lb
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
      name: http
    - protocol: TCP
      port: 443
      targetPort: 443
      name: https
    - protocol: TCP
      port: 8080
      targetPort: 8080
      name: api

以下のコマンドを実行して Serviceをリリースします。

kubectl apply -f service.yaml

Serviceオブジェクトがリリースされると Load Balancerが作成され、ポートが3つあるため3つのリスナーが下位に登録されます。各リスナーにバインドされる Access Control Listを、以下のコードをコピーして acl.yamlファイルとして保存します。

apiVersion: loadbalancer.vnks.ncloud.com/v1alpha1
kind: AccessControlList
metadata:
  name: example-acl
spec:
  rules:
    - priority: 1
      action: DENY
      ipBlockCidr: 0.0.0.0/0
      portRange: 1-65535

以下のコマンドを実行して、Access Control Listをリリースします。

kubectl apply -f acl.yaml

当該 Access Control Listオブジェクトは、ACLと同様に優先度、ポリシー、CIDR、ポート範囲を持ちます。オブジェクトをリリースすると、優先度1、アクセスソース0.0.0.0/0、ポート1-65535、アクション許可に設定された ACLが作成されます。このとき、spec.rules[].action値には「DENY」または「ALLOW」を使用できます。オブジェクトが正常にリリースされた場合、以下のコマンドでオブジェクトに関連付けられた ACLを確認します。

kubectl get acl example-acl -o jsonpath='{.status}'

Access Control Listオブジェクトの全仕様を確認するには、以下のコマンドを使用します。

kubectl get crds accesscontrollists.loadbalancer.vnks.ncloud.com -o yaml

次に作成した ACLを、Access Control List Bindingオブジェクトリリースして Load Balancerタイプの Serviceオブジェクトに関連付けることができます。ACLの関連付けのために、以下のコードをコピーして aclbinding.yamlファイルとして保存します。

apiVersion: loadbalancer.vnks.ncloud.com/v1alpha1
kind: AccessControlListBinding
metadata:
  name: example-aclb
spec:
  loadBalancerRef:
    serviceRef: test-lb
  bindingMap:
    - accessControlListName: example-acl
      port: 80
      protocol: TCP
    - accessControlListName: example-acl
      port: 443
      protocol: TCP
    - accessControlListName: example-acl
      port: 8080
      protocol: TCP

以下のコマンドを実行して、Access Control List Bindingをリリースします。

kubectl apply -f aclbinding.yaml

上記のオブジェクトは、Serviceオブジェクトで作成された Load Balancerインスタンスのリスナーにどの Access Control Listオブジェクトを関連付けるかを定義します。例では、Load Balancerインスタンスの80、443、8080 TCPポートへのすべてのアクセスをブロックする ACLを適用し、通信ができないように構成します。現在、spec.loadBalancerRefで使用可能な値は serviceRef: <service-name>ingressRef: <ingress-name>です。このとき、Access Control List Bindingオブジェクトと指定する Service、Ingressオブジェクトは同じ名前空間に存在する必要があります。

以下のコマンドを使用して、Load Balancerリスナーに関連付けられた ACLのステータスを確認します。

kubectl get aclb example-aclb -o jsonpath='{.status}'

Access Control List Bindingオブジェクトの全仕様を確認するには、以下のコマンドを使用します。

kubectl get crds accesscontrollistbindings.loadbalancer.vnks.ncloud.com -o yaml