在某些使用場景中,您可能需要調整Nginx Ingress Controller的網絡訪問類型以控制允許被訪問的客戶端范圍,例如內部服務只允許通過私網訪問的情況。通過配置,您可以使Nginx Ingress Controller只支持公網訪問、只支持私網訪問或同時支持公網和私網訪問。
前提條件
已安裝Nginx Ingress Controller組件。具體操作,請參見管理Nginx Ingress Controller組件。
已通過kubectl工具連接集群。具體操作,請參見獲取集群KubeConfig并通過kubectl工具連接集群。
操作步驟
當您通過容器服務管理控制臺創建集群并在其中安裝Nginx Ingress Controller組件時,您可以為其選擇公網或私網類型。組件安裝后,如果您需要切換Nginx Ingress Controller的網絡類型,您需要通過重新部署Nginx Ingress Controller所使用的Service以完成切換。關于配置已有的負載均衡實例注釋,詳情請參見使用已有的負載均衡。
由私網類型調整為公網類型
執行以下命令,刪除當前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 # 指明負載均衡實例地址類型為私網類型。 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,用于綁定一個私網類型的負載均衡實例。
如果您目前的Nginx Ingress Controller是私網類型,那么您可以添加一個名為nginx-ingress-lb-internet的公網類型的Service,用于綁定一個公網類型的負載均衡實例。
創建并將以下示例拷貝到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 # 指明負載均衡實例地址類型為私網類型。 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