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

Container Service for Kubernetes:インターネット向けまたは内部向けNGINX Ingressコントローラーの設定

最終更新日:Nov 14, 2024

一部のシナリオでは、Nginx Ingressコントローラーのネットワークタイプを調整して、内部サービスにプライベートネットワークを介してのみアクセスできるようにするなど、アクセスが許可されるクライアントの範囲を制御する必要がある場合があります。 Nginx Ingress Controllerは、インターネットアクセスのみ、内部アクセスのみ、またはインターネットと内部アクセスの両方を許可するように設定できます。

前提条件

手順

[ACKコンソール] を使用してContainer Service for Kubernetes (ACK) クラスターを作成し、クラスターにNGINX Ingressコントローラーをインストールする場合、インターネットまたは内部ネットワークタイプを選択できます。 インストール後にNGINX Ingressコントローラーのネットワークタイプを変更する必要がある場合は、Nginx Ingressコントローラーで使用されるサービスを再デプロイする必要があります。 アノテーションを使用してServer Load Balancer (SLB) インスタンスを構成する方法の詳細については、「アノテーションを使用してCLBインスタンスを構成する」をご参照ください。

ネットワークタイプを内部接続からインターネット接続に変更する

  1. 次のコマンドを実行して、Nginx Ingressコントローラで使用されているサービスを削除します。

    kubectl delete svc -n kube-system nginx-ingress-lb
  2. nginx-ingress-lb.yamlという名前のファイルを作成し、次のサンプルコードをコピーします。

    apiVersion: v1
    種類: サービス
    メタデータ:
      名前: nginx-ingress-lb
      namespace: kube-system
      labels:
        アプリ: nginx-ingress-lb
    spec:
      type: LoadBalancer
      externalTrafficPolicy: "ローカル"
      ポート:
      - port: 80
        name: http
        targetPort: 80
      - port: 443
        name: https
        targetPort: 443
      セレクタ:
        アプリ: ingress-nginx 
  3. 次のコマンドを実行して、インターネット向けのLoadBalancerサービスを作成します。

    kubectl apply -f nginx-ingress-lb.yaml
  4. 次のコマンドを実行して、サービスのネットワークタイプを照会します。

    kubectl -n kube-system get svc | grep nginx-ingress-lb

    期待される出力:

    nginx-ingress-lb LoadBalancer 192.168。* 。**120.26。** 80:30275/TCP、443:30899/TCP 52m

ネットワークタイプをインターネット接続から内部接続に変更する

  1. 次のコマンドを実行して、Nginx Ingressコントローラで使用されているサービスを削除します。

    kubectl delete svc -n kube-system nginx-ingress-lb
  2. nginx-ingress-lb.yamlという名前のファイルを作成し、次のサンプルコードをコピーします。

    apiVersion: v1
    種類: サービス
    メタデータ:
      名前: nginx-ingress-lb
      namespace: kube-system
      labels:
        アプリ: nginx-ingress-lb
      アノテーション:
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: intranet# ロードバランサーインスタンスのアドレスタイプをプライベートに指定します。
    仕様:
      type: LoadBalancer
      externalTrafficPolicy: "ローカル"
      ポート:
      - port: 80
        name: http
        targetPort: 80
      - port: 443
        name: https
        targetPort: 443
      セレクタ:
        アプリ: ingress-nginx 
  3. 次のコマンドを実行して、内部対応のLoadBalancerサービスを作成します。

    kubectl apply -f nginx-ingress-lb.yaml
  4. 次のコマンドを実行して、サービスのネットワークタイプを照会します。

    kubectl -n kube-system get svc | grep nginx-ingress-lb

    期待される出力:

    nginx-ingress-lb LoadBalancer 192.168。* 。**172.2** 。**80:30275/TCP、443:30899/TCP 5h

内部ネットワークタイプとインターネットネットワークタイプの両方を使用する

一部のシナリオでは、ACKクラスターのサービスを、クラスターのVPC内の内部アクセスと外部アクセスの両方に公開する必要がある場合があります。 Nginx Ingressコントローラーが属するポッドに対して、異なるネットワークタイプの2つのサービスをデプロイする必要があります。

  • Nginx Ingressコントローラーがインターネットに接続されている場合は、nginx-ingress-lb-intranetという名前の内部接続サービスを作成し、内部接続SLBインスタンスをサービスにバインドします。

  • Nginx Ingressコントローラーが内部接続の場合は、nginx-ingress-lb-Internetという名前のインターネット接続サービスを作成し、インターネット接続SLBインスタンスをサービスにバインドします。

image
  1. nginx-ingress-lb.yamlという名前のファイルを作成し、次のサンプルコードをコピーします。

    内部サービスの作成

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-ingress-lb-intranet
      namespace: kube-system
      labels:
        app: nginx-ingress-lb
      annotations:
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: intranet # Specify the load balancer instance address type as private.
    spec:
      type: LoadBalancer
      externalTrafficPolicy: "Cluster"
      ports:
      - port: 80
        name: http
        targetPort: 80
      - port: 443
        name: https
        targetPort: 443
      selector:
        app: ingress-nginx

    インターネットサービスの作成

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-ingress-lb-internet
      namespace: kube-system
      labels:
        app: nginx-ingress-lb
    spec:
      type: LoadBalancer
      externalTrafficPolicy: "Cluster"
      ports:
      - port: 80
        name: http
        targetPort: 80
      - port: 443
        name: https
        targetPort: 443
      selector:
        app: ingress-nginx
  2. 次のコマンドを実行して、新しいサービスを作成します。

    kubectl apply -f  nginx-ingress-lb.yaml