Nginx Ingress是一種用於Kubernetes叢集的網路流量管理解決方案,通過Ingress API對象將外部流量路由到叢集內部服務。Nginx Ingress Controller部署在叢集內部,提供高效能和可定製性。ACK Edge叢集整合社區版本和阿里雲產品功能,提供更便捷的使用體驗。本文介紹如何在ACK Edge叢集中使用Nginx Ingress。
操作步驟
分別在雲端節點池和邊緣節點池部署Nginx Ingress Controller,具體操作,請參見部署Nginx Ingress Controller。 部署完成後,可以查看Nginx Ingress Controller狀態,以及服務暴露狀態。
執行以下命令查看雲端節點池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>
執行以下命令查看雲端節點池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
執行以下命令查看邊緣節點池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>
執行以下命令查看邊緣節點池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
使用以下內容,建立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
執行以下命令,建立測試應用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
使用以下內容,建立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
執行以下命令,查看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 Controller組件? | 僅支援應用市場部署。 | |
如何升級Nginx Ingress Controller組件? | 僅支援應用市場升級。 | |
如何通過部署Nginx Ingress Controller來支撐高負載應用? | 無。 | |
如何配置Ingress Controller CLB的公網和私網類型? | 僅支援部署在雲上節點池的Ingress Controller。 | |
如何通過Nginx Ingress實現灰階發布和藍綠髮布? | 無。 | |
如何通過Ingress Controller來實現應用的流量複製? | 無。 | |
如何進行Nginx Ingress Controller組件的鏈路追蹤? | 無。 | |
如何部署及查看Nginx Ingress訪問日誌? | 僅支援命令列開啟。 | |
如何通過Ingress Controller實現gRPC服務訪問? | 無。 |