全部產品
Search
文件中心

Container Service for Kubernetes:如何使用Nginx Ingress

更新時間:Aug 07, 2024

Nginx Ingress是一種用於Kubernetes叢集的網路流量管理解決方案,通過Ingress API對象將外部流量路由到叢集內部服務。Nginx Ingress Controller部署在叢集內部,提供高效能和可定製性。ACK Edge叢集整合社區版本和阿里雲產品功能,提供更便捷的使用體驗。本文介紹如何在ACK Edge叢集中使用Nginx Ingress。

操作步驟

  1. 分別在雲端節點池和邊緣節點池部署Nginx Ingress Controller,具體操作,請參見部署Nginx Ingress Controller。 部署完成後,可以查看Nginx Ingress Controller狀態,以及服務暴露狀態。

    1. 執行以下命令查看雲端節點池Nginx Ingress Controller Pod狀態。

      kubectl get po -n ingress-cloud -o wide

      預期輸出:

      NAME                                                     READY   STATUS    RESTARTS   AGE     IP           NODE           NOMINATED NODE   READINESS GATES
      ack-ingress-nginx-v1-cloud-controller-7d7b555f8b-5kgqb   1/1     Running   0          20s     10.10.0.1    cloud-node-1   <none>           <none>
      ack-ingress-nginx-v1-cloud-controller-7d7b555f8b-725cl   1/1     Running   0          20s     10.10.0.2    cloud-node-2   <none>           <none>
    2. 執行以下命令查看雲端節點池Nginx Ingress Controller服務狀態。

      kubectl get svc -n ingress-cloud

      預期輸出:

      NAME                                    TYPE           CLUSTER-IP      EXTERNAL-IP       PORT(S)                      AGE
      ack-ingress-nginx-v1-cloud-controller   LoadBalancer   172.12.0.1     xxx.xxx.xxx.xxx   80:30080/TCP,443:30443/TCP    30S
    3. 執行以下命令查看邊緣節點池Nginx Ingress Controller Pod狀態。

      kubectl get po -n ingress-edge -o wide

      預期輸出:

      NAME                                                    READY   STATUS    RESTARTS   AGE   IP           NODE          NOMINATED NODE   READINESS GATES
      ack-ingress-nginx-v1-edge-controller-7d57b84c88-4wsm4   1/1     Running   0          17s   10.10.0.1    edge-node-1   <none>           <none>
      ack-ingress-nginx-v1-edge-controller-7d57b84c88-fqvj8   1/1     Running   0          17s   10.10.1.1    edge-node-2   <none>           <none>
    4. 執行以下命令查看邊緣節點池Nginx Ingress Controller服務狀態。

      kubectl get svc -n ingress-edge

      預期輸出:

      NAME                                   TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
      ack-ingress-nginx-v1-edge-controller   NodePort   172.12.0.2      <none>        80:32080/TCP,443:32443/TCP   3m51s
  2. 使用以下內容,建立cube.yaml。

    apiVersion: v1
    kind: Service
    metadata:
      name: cube-svc
      annotations:
        openyurt.io/topologyKeys: openyurt.io/nodepool
    spec:
      type: ClusterIP
      selector:
        app: cube
      ports:
        - port: 80
          targetPort: 80
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: cube
      labels:
        app: cube
    spec:
      replicas: 4
      selector:
        matchLabels:
          app: cube
      template:
        metadata:
          labels:
            app: cube
        spec:
          containers:
          - name: cube-web
            image: registry.cn-hangzhou.aliyuncs.com/acr-toolkit/ack-cube:1.0
            ports:
            - containerPort: 80
  3. 執行以下命令,建立測試應用cube和Service。

    kubectl apply -f cube.yaml

    執行以下命令,查看業務Pod是否分別部署在雲端節點池和邊緣節點池。

    kubectl get pod  -o wide

    預期輸出:

    NAME                    READY   STATUS    RESTARTS   AGE   IP            NODE           
    cube-757558c974-9zfkn   1/1     Running   0          11m   10.10.0.1     cloud-node-1   
    cube-757558c974-cw72m   1/1     Running   0          11m   10.10.0.2     cloud-node-2   
    cube-757558c974-fbvlf   1/1     Running   0          11m   10.10.1.1     edge-node-1    
    cube-757558c974-ngwxt   1/1     Running   0          11m   10.10.1.2     edge-node-2    
  4. 使用以下內容,建立ingress.yaml,分別為雲端Ingress Controller和邊緣Ingress Controller建立Ingress。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: cube-ingress-cloud
      namespace: default
    spec:
      ingressClassName: ack-nginx-cloud               # 為雲端Ingress Controller建立Ingress。
      rules:
      - host: example.cube.com
        http:
          paths:
          - path: /
            backend:
              service:
                name: cube-svc
                port:
                  number: 80
            pathType: ImplementationSpecific
    
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: cube-ingress-edge
      namespace: default
    spec:
      ingressClassName: ack-nginx-edge                 # 為邊緣Ingress Controller建立Ingress。
      rules:
      - host: example.cube.com
        http:
          paths:
          - path: /
            backend:
              service:
                name: cube-svc
                port:
                  number: 80
            pathType: ImplementationSpecific

    執行以下命令,建立Ingress資源。

    kubectl apply -f ingress.yaml
  5. 執行以下命令,查看ingress資源。

    kubectl get ingress

    預期輸出:

    NAME                 CLASS             HOSTS              ADDRESS           PORTS   AGE
    cube-ingress-cloud   ack-nginx-cloud   example.cube.com   139.224.xxx.xxx   80      24m
    cube-ingress-edge    ack-nginx-edge    example.cube.com   172.20.xxx.xxx    80      24m
    • 雲端節點池的Ingress Controller通過LoadBalancer類型的Service對外暴露服務,因此負載平衡的地址會自動填滿到Ingress的地址欄位中。您可以直接使用這個負載平衡的地址來訪問服務。

    • 邊緣節點池的Ingress Controller通過NodePort類型的Service對外暴露服務,因此會將Service的ClusterIP地址填充到Ingress的地址中,您可以使用節點地址加上NodePort的方式來訪問服務。

相關文檔

ACK Edge叢集ACK叢集Pro版的基礎上擴充了邊緣節點池用於接入邊緣節點、IDC機器,因此在ACK Edge叢集上使用Nginx Ingress可支援以下能力:

相關操作

文檔

ACK Edge差異點

如何建立Nginx Ingress?

建立Nginx Ingress

需要根據實際情境配置流量拓撲。

如何部署Nginx Ingress Controller組件?

部署Nginx Ingress Controller

僅支援應用市場部署。

如何升級Nginx Ingress Controller組件?

升級應用市場ack-ingress-nginx

僅支援應用市場升級。

如何通過部署Nginx Ingress Controller來支撐高負載應用?

部署高負載情境的Nginx Ingress Controller

無。

如何配置Ingress Controller CLB的公網和私網類型?

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

僅支援部署在雲上節點池的Ingress Controller。

如何通過Nginx Ingress實現灰階發布和藍綠髮布?

通過Nginx Ingress實現灰階發布和藍綠髮布

無。

如何通過Ingress Controller來實現應用的流量複製?

通過Ingress Controller來實現應用的流量複製

無。

如何進行Nginx Ingress Controller組件的鏈路追蹤?

實現Nginx Ingress Controller組件的鏈路追蹤

無。

如何部署及查看Nginx Ingress訪問日誌?

Nginx Ingress訪問日誌分析與監控

僅支援命令列開啟。

如何通過Ingress Controller實現gRPC服務訪問?

通過Nginx Ingress Controller實現gRPC服務訪問

無。