当該コンテンツは、ローカリゼーションサービスを準備しております。早急にローカライズサービスをご提供できるよう、努めております。

ロードバランサー商品連動ガイド

Kubernetesのサービスによるロードバランサー商品連動

ネイバークラウドプラットフォームのKubernetes Serviceは、Kubernetesサービス作成時にタイプをLoadBalancerに指定すると、ロードバランサーインスタンスを自動的に作成します。 ロードバランサの設定はサービスマニフェスト(Manifest)のアノテーション(Annotation)によって行います。

次のロードバランサ設定のためのアノテーションを提供します。

設定値 説明 備考
service.beta.kubernetes.io/ncloud-load-balancer-size ロードバランサ負荷処理性能.
次の値の中から一つ選択 : SMALL, MEDIUM, LARGE
基本値 SMALL, 私設ネットワークタイプのロードバランサの場合は SMALLでのみ生成可能.
service.beta.kubernetes.io/ncloud-load-balancer-internal 私設ネットワークタイプのロードバランサ生成設定.
次の値のいずれか選択 : true/false
基本値 false
service.beta.kubernetes.io/ncloud-load-balancer-description 作成されるロードバランサーインスタンスのメモ入力
service.beta.kubernetes.io/ncloud-load-balancer-termination-protection タイプが LoadBalancerに指定された Service を削除する際、ロードバランサーを自動除去する。 基本値 false
service.beta.kubernetes.io/ncloud-load-balancer-inbound-source ACGルールのInboundアクセスソースとして使用する値. e.g. "119.194.195.143/32,143.248.12.77/32" 基本値 0.0.0.0/0
service.beta.kubernetes.io/ncloud-load-balancer-subnet-id ロードバランサ生成のためのロードバランサ専用サブネットのID値 デフォルトでは、 kube-system内の ncloud-config 名の configmap 内の lbSubnetNo を使用

ロードバランサインスタンス作成

Kubernetesのサービスを通じてロードバランサインスタンスを作成するには、サービスマニフェストのタイプを次のように指定します。

"type": "LoadBalancer"

以下は、そのタイプが適用された yaml 設定ファイルの例です。 私設のネットワーク タイプのロード バランサ インスタンスを生成するためのアノテーションが追加されていることを確認します。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      run: my-nginx
  template:
    metadata:
      labels:
        run: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx
        ports:
        - containerPort: 80
---

kind: Service
apiVersion: v1
metadata:
  name: my-nginx
  annotations:
    service.beta.kubernetes.io/ncloud-load-balancer-internal: "true"
    service.beta.kubernetes.io/ncloud-load-balancer-size: "SMALL"
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    run: my-nginx
  type: LoadBalancer

上記の内容を nks-lb.ymlにし、 kubectl apply -f nks-lb.ymlを通じて配布すると、NAVERクラウドプラットフォームのロードバランサーインスタンスが自動的に作成されます。 作成には一定時間を要することがあります。

生成されたロード バランサ インスタンスの私設 IP アドレスを確認するには、次のコマンドを利用します。 IP アドレスはEXTERNAL-IP 列で確認できます。

$ kubectl --kubeconfig $KUBE_CONFIG get svc example-service
NAME              TYPE           CLUSTER-IP       EXTERNAL-IP    PORT(S)          AGE
example-service   LoadBalancer   172.16.101.104   10.39.10.118   8765:30365/TCP   2m11s

アノテーションを利用したロードバランサインスタンス属性の設定例

Kubernetesは、オブジェクトにキー値形態のメタデータを添付することができます。 タイプがLoadBalancerであるServiceオブジェクトを作成する際に、metadata.annotationsの値を入力する場合、カスタマイズされたロードバランサーを生成することができます。

1. ロードバランサ作成時のACGルールのInbound Source設定

サービスタイプがLoadBalancerの場合、外部との通信のためにデフォルトでInboundアクセスソースに 0.0.0.0/0のACG規則が設定されます。他の IP Block をアクセス ソースに設定する必要がある場合は、 service.beta.kubernetes.io/ncloud-load-balancer-inbound-sourceのアノテーションを利用することができます。 複数のアクセス ソースが必要な場合には、コンマ(,)で区切って入力することができます。

kind: Service
apiVersion: v1
metadata:
  name: my-nginx
  annotations:
    service.beta.kubernetes.io/ncloud-load-balancer-inbound-source: "10.120.0.0/16,143.248.12.77/32"
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    run: my-nginx
  type: LoadBalancer

2. ロードバランサが作成されるロードバランサ専用サブネット選択

ロードバランサーを作成すると、デフォルトとして kube-system内の ncloud-config 名の configmap 内の lbSubnetNoを使用します。 他のロード バランサ専用サブネットにロード バランサを作成する必要がある場合、 service.beta.kubernetes.io/ncloud-load-balancer-subnet-id アノテーションを使用することができます。

設定されたデフォルトのロードバランサ専用サブネットを変更するためには、下節にある問題解決の「ロードバランサ専用サブネットの IP アドレス不足による生成問題」を参照してください。

kind: Service
apiVersion: v1
metadata:
  name: my-nginx
  annotations:
    service.beta.kubernetes.io/ncloud-load-balancer-subnet-id: "452772"
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    run: my-nginx
  type: LoadBalancer

kubectl expose 命令を利用したロードバランサインスタンス作成

前述した方法以外にも、 kubectl expose コマンドと --type=LoadBalancer フラグを利用してロードバランサインスタンスを作成できます。

ロード バランサ インスタンス生成を例題するため、次のようなコマンドを利用して、 my-nginx 名を持つ Deployment を配布します。 この配布でNginxパドを駆動させることができます。

$ kubectl --kubeconfig $KUBE_CONFIG create deployment --image nginx my-nginx

次のコマンドを利用して、ロード バランサ インスタンスを作成することができます。

$ kubectl --kubeconfig $KUBE_CONFIG expose deployment my-nginx --port=80 --type=LoadBalancer

ロードバランサインスタンスを削除する

ロードバランサタイプで作成されたkubernetesサービスリソースは、自動的に作成されたネイバークラウドプラットフォームのロードバランサ(Load Balancer)インスタンスと連動されます。 kerbernetesから該当タイプのサービスを削除すると、自動的にロードバランサインスタンスも削除されます。

次のコマンドで生成されたサービスを確認することができます。 サービスに対するタイプはTYPE 列で確認できます。

$ kubectl --kubeconfig $KUBE_CONFIG get service
NAME         TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
my-nginx     LoadBalancer   172.16.188.167   10.1.9.6     80:32681/TCP   21s

ロード バランサ タイプの kubernetes サービス リソースを削除するために、次のコマンドを利用します。

$ kubectl --kubeconfig $KUBE_CONFIG delete service my-nginx
service "my-nginx" deleted

kubernetesサービスリソースが削除されると同時に、ロードバランサインスタンスも削除されます。 この作業には一定時間を要することがあります。


問題解決

以下の節は、KubernetesのServiceオブジェクトタイプを「LoadBalancer」に指定して、ロードバランサを作成しようとする場合に発生しうる問題を説明します。

ロードバランサ専用サブネットのIPアドレス不足による生成問題

ロード バランサ専用サブネットでこれ以上使用可能な IP アドレスがない場合、 EXTERNAL-IP 項目は <pending> 状態にとどまります。

$ kubectl --kubeconfig $KUBE_CONFIG get svc
NAME         TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)        AGE
my-nginx    LoadBalancer   172.19.113.34    <pending>       80:32225/TCP   18h

次のコマンドで、「kube-system」name spaceに「ncloud-config」名前を持つ「configmap」以下のコマンドで、イベントリストから関連内容を確認することができます。

$ kubectl --kubeconfig $KUBE_CONFIG describe svc my-nginx
Name: my-nginx
Namespace: default
Selector: app=my-nginx
Type: LoadBalancer
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal EnsuringLoadBalancer 16s (x4 over 52s) service-controller Ensuring load balancer
Warning SyncLoadBalancerFailed 16s (x4 over 51s) service-controller Error syncing load balancer: failed to ensure load balancer: Not Enough Available IP

ロード バランサ専用サブネットに可用 IP アドレスがない場合、以下の方法で追加生成されるロード バランサ専用サブネットを変更することができます。

次のコマンドで、kube-system namespaceに ncloud-config 名前を持つconfigmapを照会します。

$ kubectl --kubeconfig $KUBE_CONFIG get configmap ncloud-config -n kube-system
NAME            DATA   AGE
ncloud-config   9      131m

$ kubectl --kubeconfig $KUBE_CONFIG get configmap ncloud-config -n kube-system -o yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: ncloud-config
  namespace: kube-system
data:
  acgNo: "12345"
  apiUrl: https://nks.apigw.ntruss.com
  basePath: /ncloud-api/v1
  lbSubnetNo: "12345"
  regionCode: KR
  regionNo: "11"
  vpcNo: "12345"
  zoneNo: "110"
  • data.acgNo: 쿠バーネティスワーカーノードのeth0インターフェイスに割り当てられたacgのインスタンスIDを入力します。
  • data.apiUrl: https://nks.apigw.ntruss.comと入力します。
  • data.basePath: /ncloud-api/v1と入力します。
  • data.lbSubnetNo: クバネティスワーカーノードが割り当てられたVPC内のロードバランサ専用サブネットのSubnetIDを入力します。
  • data.regionCode: クバネティスワーカーノードが位置するリージョンコードを入力します。 (例: "FKR")
  • data.regionNo: クバネティス·ワーカーノードのリージョン番号を入力しようとします。(例: "11")
  • data.vpcNo: クバネティスワーカーノードが割り当てられたVPCのVPC IDを入力します。
  • data.zoneNo: クバネティスワーカーノードが位置するゾーン番号を入力します。(例: "110")

Kubernetes Workerノードが作成されたVPC内のロードバランサ専用サブネットのSubnet IDを使用する必要があります。
正しくない値を入力する場合、ロードバランサーが正常に生成されません。

次のコマンドを利用して、ロードバランサ専用のサブセットを変更します。 入力値としてdata.lbSubnetNoフィールドにSubnetIDを入力します。
次のように値にSubnet IDを入力します。 例題でSubnet IDを94465として使用しました。

kubectl --kubeconfig $KUBE_CONFIG -n kube-system patch configmap ncloud-config --type='json' -p='[{"op":"replace", "path":"/data/lbSubnetNo", "value": "94465"}]'

変更後、再びconfigmapを照会して、変更事項が適用されたかを確認します。

$ kubectl --kubeconfig $KUBE_CONFIG get configmap ncloud-config -n kube-system -o yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: ncloud-config
  namespace: kube-system
data:
  acgNo: "12345"
  apiUrl: https://nks.apigw.ntruss.com
  basePath: /ncloud-api/v1
  lbSubnetNo: "94465"
  regionCode: FKR
  regionNo: "11"
  vpcNo: "12345"
  zoneNo: "110"

に対する検索結果は~件です。 ""

    に対する検索結果がありません。 ""

    処理中...