在Kubernetes集群中,Service是将运行的一组Pod的网络应用进行服务暴露的标准方法,能够解耦前端和后端的关联,从而实现松耦合的微服务设计。Service服务支持多种类型,例如ClusterIP、NodePort、LoadBalancer等。本文主要为您介绍如何在ACK Edge集群中,通过LoadBalancer(负载均衡)类型Service对外暴露应用。
背景信息
Kubernetes集群支持的所有Service类型,请参见使用Service实现对外暴露应用。
ACK Edge集群可以被划分为云上节点池和云下节点池(边缘节点池),云上节点池以及其托管的管控面形成一个ACK集群。
在ACK Edge集群中,您可以选择通过在云上节点池使用负载均衡类型Service暴露应用,也可以在云下(边缘)节点池上使用负载均衡Service暴露应用。
云上节点池使用负载均衡类型Service
如果您的线下IDC节点和云上VPC通过专线打通主机网络,可以在云上使用负载均衡类服务,将业务请求通过专线转发到云下IDC的工作负载上。
更多实现方案和操作可参考如下文档:
内容分类 | 相关文档 |
概述 | |
SLB | |
CLB | |
NLB | |
问题排查和FAQ |
边缘(云下)节点池使用负载均衡类型Service
边缘侧支持多个网络域的数据中心计算资源接入,每个数据中心作为一个节点池,并支持同一组业务在多地域进行服务暴露,即一个Service在多个数据中心对应多个接入点。
当前ACK Edge集群仅支持阿里云ENS数据中心以及ENS负载均衡。
ACK Edge集群提供了一个新的自定义集群资源PoolService,云上托管组件edge-controller-manager会根据您创建的负载均衡Service,自动为您选中一个由节点池管理的PoolService资源,该地域的负载均衡实例生命周期会跟这个PoolService资源进行绑定。
部署负载均衡类型Service示例
步骤一:部署应用
采用以下YAML内容创建名为nginx.yaml的文件。
apiVersion: apps/v1 kind: Deployment metadata: name: nginx labels: app: nginx spec: selector: matchLabels: app: nginx replicas: 3 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.22 ports: - containerPort: 80
执行以下命令部署名为nginx的应用。
kubectl apply -f nginx.yaml
执行以下命令确认应用状态正常。
kubectl get deployment nginx
预期输出如下:
NAME READY UP-TO-DATE AVAILABLE AGE nginx 3/3 3 3 13s
步骤二:在节点池部署负载均衡类型Service公开应用
在云上节点池部署SLB类型Service
采用以下YAML内容创建名为nginx-svc-cloud.yaml的文件。
apiVersion: v1 kind: Service metadata: name: nginx-svc-cloud labels: app: nginx annotations: openyurt.io/topologyKeys: openyurt.io/nodepool #服务拓扑限制流量节点池闭环 spec: selector: app: nginx type: LoadBalancer externalTrafficPolicy: Cluster ports: - name: nginx port: 80 protocol: TCP targetPort: 80
执行以下命令部署名为nginx-svc-cloud的服务,并通过该服务对外公开应用。
kubectl apply -f nginx-svc-cloud.yaml
执行以下命令确认nginx-svc-cloud服务已创建。
kubectl get service
预期输出如下:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-svc-cloud LoadBalancer 10.110.xxx.xxx 120.26.xxx.xxx 80:32433/TCP 3m6s
执行以下命令确认服务已对外公开。
说明请将命令中的IP地址替换为上一步骤中返回的
EXTERNAL-IP
。curl http://120.26.xxx.xxx:80
预期输出如下:
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> html { color-scheme: light dark; } body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
在边缘节点池部署ELB类型Service
采用以下YAML内容创建名为nginx-svc-edge.yaml的文件。
apiVersion: v1 kind: Service metadata: name: nginx-svc-edge labels: app: nginx annotations: openyurt.io/topologyKeys: openyurt.io/nodepool #服务拓扑限制流量节点池闭环 service.openyurt.io/nodepool-labelselector: edge-svc=nginx #边缘节点池选择器 spec: selector: app: nginx type: LoadBalancer loadBalancerClass: alibabacloud.com/elb externalTrafficPolicy: Cluster ports: - name: nginx port: 80 protocol: TCP targetPort: 80
执行以下命令部署名为nginx-svc-edge的服务,并通过该服务对外公开应用。
kubectl apply -f nginx-svc-edge.yaml
执行以下命令确认nginx-svc-edge服务已创建。
kubectl get service
预期输出如下:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-svc-edge LoadBalancer 10.110.xxx.xxx 112.28.xxx.xxx,117.177.xxx.xxx 80:30048/TCP 12m
执行以下命令查看多地域的PoolService。
kubectl get ps
预期输出如下:
NAME AGE nginx-svc-edge-np4d3f9f93f8df4e47aef87661bf****** 13m nginx-svc-edge-npb3bcd4eacaaa449aa0a5a00260****** 13m
执行以下命令确认服务已对外公开。
说明请将命令中的IP地址替换为步骤2中返回的
EXTERNAL-IP
。curl http://112.28.xxx.xxx:30048
预期输出如下:
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> html { color-scheme: light dark; } body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
- 本页导读 (1)