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是否分別部署在雲端節點池和邊緣節點池。
預期輸出:
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
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
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資源。
預期輸出:
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可支援以下能力: