一部のシナリオでは、Nginx Ingressコントローラーのネットワークタイプを調整して、内部サービスにプライベートネットワークを介してのみアクセスできるようにするなど、アクセスが許可されるクライアントの範囲を制御する必要がある場合があります。 Nginx Ingress Controllerは、インターネットアクセスのみ、内部アクセスのみ、またはインターネットと内部アクセスの両方を許可するように設定できます。
前提条件
NGINX Ingressコントローラがインストールされています。 詳細については、「NGINX Ingressコントローラーの管理」をご参照ください。
kubectlクライアントがACKクラスターに接続されています。 詳細については、「クラスターのkubeconfigファイルを取得し、kubectlを使用してクラスターに接続する」をご参照ください。
手順
[ACKコンソール] を使用してContainer Service for Kubernetes (ACK) クラスターを作成し、クラスターにNGINX Ingressコントローラーをインストールする場合、インターネットまたは内部ネットワークタイプを選択できます。 インストール後にNGINX Ingressコントローラーのネットワークタイプを変更する必要がある場合は、Nginx Ingressコントローラーで使用されるサービスを再デプロイする必要があります。 アノテーションを使用してServer Load Balancer (SLB) インスタンスを構成する方法の詳細については、「アノテーションを使用してCLBインスタンスを構成する」をご参照ください。
ネットワークタイプを内部接続からインターネット接続に変更する
次のコマンドを実行して、Nginx Ingressコントローラで使用されているサービスを削除します。
kubectl delete svc -n kube-system nginx-ingress-lb
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
次のコマンドを実行して、インターネット向けのLoadBalancerサービスを作成します。
kubectl apply -f nginx-ingress-lb.yaml
次のコマンドを実行して、サービスのネットワークタイプを照会します。
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
ネットワークタイプをインターネット接続から内部接続に変更する
次のコマンドを実行して、Nginx Ingressコントローラで使用されているサービスを削除します。
kubectl delete svc -n kube-system nginx-ingress-lb
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
次のコマンドを実行して、内部対応のLoadBalancerサービスを作成します。
kubectl apply -f nginx-ingress-lb.yaml
次のコマンドを実行して、サービスのネットワークタイプを照会します。
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インスタンスをサービスにバインドします。
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
次のコマンドを実行して、新しいサービスを作成します。
kubectl apply -f nginx-ingress-lb.yaml