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服务访问? | 无。 |