在某些使用情境中,您可能需要調整Nginx Ingress Controller的網路訪問類型以控制允許被訪問的用戶端範圍,例如內部服務只允許通過私網訪問的情況。通過配置,您可以使Nginx Ingress Controller只支援公網訪問、只支援私網訪問或同時支援公網和私網訪問。
前提條件
已安裝Nginx Ingress Controller組件。具體操作,請參見管理Nginx Ingress Controller組件。
已通過kubectl工具串連叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集。
操作步驟
當您通過Container Service管理主控台建立叢集並在其中安裝Nginx Ingress Controller組件時,您可以為其選擇公網或私網類型。組件安裝後,如果您需要切換Nginx Ingress Controller的網路類型,您需要通過重新部署Nginx Ingress Controller所使用的Service以完成切換。關於配置已有的Server Load Balancer執行個體注釋,詳情請參見使用已有的負載平衡。
由私網類型調整為公網類型
執行以下命令,刪除當前Nginx Ingress Controller使用的Service。
kubectl delete svc -n kube-system nginx-ingress-lb
建立並將以下樣本拷貝到nginx-ingress-lb.yaml中。
apiVersion: v1 kind: Service metadata: name: nginx-ingress-lb namespace: kube-system labels: app: nginx-ingress-lb spec: type: LoadBalancer externalTrafficPolicy: "Local" ports: - port: 80 name: http targetPort: 80 - port: 443 name: https targetPort: 443 selector: app: ingress-nginx
執行以下命令,建立公網LoadBalancer類型的Service。
kubectl apply -f nginx-ingress-lb.yaml
執行以下命令,查看新建立公網類型的Service。
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 Controller使用的Service。
kubectl delete svc -n kube-system nginx-ingress-lb
建立並將以下樣本拷貝到nginx-ingress-lb.yaml中。
apiVersion: v1 kind: Service metadata: name: nginx-ingress-lb namespace: kube-system labels: app: nginx-ingress-lb annotations: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: intranet # 指明Server Load Balancer執行個體地址類型為私網類型。 spec: type: LoadBalancer externalTrafficPolicy: "Local" ports: - port: 80 name: http targetPort: 80 - port: 443 name: https targetPort: 443 selector: app: ingress-nginx
執行以下命令,建立公網LoadBalancer類型的Service。
kubectl apply -f nginx-ingress-lb.yaml
執行以下命令,查看新建立的公網類型的Service。
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
同時支援私網和公網類型
對於一些特殊情境,您期望容器叢集內的服務既能允許公網訪問,同時又希望能被同一個VPC下的其他服務直接存取(不經過公網)。您需要為Nginx Ingress Controller所屬的Pod部署兩個不同網路類型的Service來達成這種效果:
如果您目前的Nginx Ingress Controller是公網類型,那麼您可以添加一個名為nginx-ingress-lb-intranet的私網類型的Service,用於綁定一個私網類型的Server Load Balancer執行個體。
如果您目前的Nginx Ingress Controller是私網類型,那麼您可以添加一個名為nginx-ingress-lb-internet的公網類型的Service,用於綁定一個公網類型的Server Load Balancer執行個體。
建立並將以下樣本拷貝到nginx-ingress-lb.yaml中。
添加私網類型的Service
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 # 指明Server Load Balancer執行個體地址類型為私網類型。 spec: type: LoadBalancer externalTrafficPolicy: "Cluster" ports: - port: 80 name: http targetPort: 80 - port: 443 name: https targetPort: 443 selector: app: ingress-nginx
添加公網類型的Service
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
執行以下命令,建立新的Service。
kubectl apply -f nginx-ingress-lb.yaml