在某些使用情境中,您可能需要調整Nginx Ingress Controller的網路訪問類型以控制允許被訪問的用戶端範圍,例如內部服務只允許通過私網訪問的情況。通過配置,您可以使Nginx Ingress Controller只支援公網訪問、只支援私網訪問或同時支援公網和私網訪問。
操作步驟
當您通過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
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
添加公網類型的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
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