全部產品
Search
文件中心

:配置公網和私網類型的Nginx Ingress Controller

更新時間:Aug 14, 2024

在某些使用情境中,您可能需要調整Nginx Ingress Controller的網路訪問類型以控制允許被訪問的用戶端範圍,例如內部服務只允許通過私網訪問的情況。通過配置,您可以使Nginx Ingress Controller只支援公網訪問、只支援私網訪問或同時支援公網和私網訪問。

前提條件

操作步驟

當您通過Container Service管理主控台建立叢集並在其中安裝Nginx Ingress Controller組件時,您可以為其選擇公網或私網類型。組件安裝後,如果您需要切換Nginx Ingress Controller的網路類型,您需要通過重新部署Nginx Ingress Controller所使用的Service以完成切換。

由私網類型調整為公網類型

  1. 執行以下命令,刪除當前Nginx Ingress Controller使用的Service。

    kubectl delete svc -n kube-system nginx-ingress-lb
  2. 建立並將以下樣本拷貝到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
  3. 執行以下命令,建立公網LoadBalancer類型的Service。

    kubectl apply -f  nginx-ingress-lb.yaml
  4. 執行以下命令,查看新建立公網類型的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

由公網類型調整為私網類型

  1. 執行以下命令,刪除當前Nginx Ingress Controller使用的Service。

    kubectl delete svc -n kube-system nginx-ingress-lb
  2. 建立並將以下樣本拷貝到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
  3. 執行以下命令,建立公網LoadBalancer類型的Service。

    kubectl apply -f  nginx-ingress-lb.yaml
  4. 執行以下命令,查看新建立的公網類型的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執行個體。

  1. 建立並將以下樣本拷貝到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
  2. 執行以下命令,建立新的Service。

    kubectl apply -f  nginx-ingress-lb.yaml