在Kubernetes中,Service是用于将运行在一组Pod上的应用程序公开为网络服务的抽象概念,本文以Nginx无状态应用为例,介绍如何在ACK Edge集群中使用NodePort类型的Service暴露应用。
使用NodePort类型的Service
由于在边缘侧无负载均衡,因此常见的对集群外服务暴露的方式常常采用NodePort类型的Service。在ACK Edge集群中使用NodePort Service如图所示。部署NodePort类型的Service并选择好后端Pod后,您可以直接通过节点地址和节点端口访问后端服务。更多Service类型以及介绍详情,请参见Service快速入门。
注意事项
由于ACK Edge集群中的节点常分布在不同的网络域中,多个网络域中的节点、容器无法相互访问。
为确保访问流量仅转发到本节点池或本节点上的后端Pod,可配置Service服务拓扑,以避免流量被转发到其他网络域的Pod后端而导致的网络不通问题。具体操作,请参见节点池服务拓扑管理。
为方便您在各个网络域中监听节点端口,并确保不同网络域之间的端口不发生冲突,建议配置端口隔离。具体操作,请参见NodePort端口监听隔离。
操作步骤
步骤一:部署示例应用
使用以下示例的YAML内容,创建名为nginx.yaml文件。
apiVersion: apps/v1 kind: Deployment metadata: name: nginx labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80
执行以下命令,部署示例应用。
kubectl apply -f nginx.yaml
执行以下命令,查看示例状态。
kubectl get deployment nginx
预期输出:
NAME READY UP-TO-DATE AVAILABLE AGE nginx 2/2 2 2 43s
步骤二:使用NodePort类型的Service
使用以下示例服务的YAML内容,创建nginx-svc.yaml的文件。
apiVersion: v1 kind: Service metadata: labels: app: nginx name: nginx-svc namespace: default spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: # 其中spec.selector对应上文中nginx.yaml的spec.selector.matchLabels对应标签。 app: nginx type: NodePort
执行以下命令,创建名为nginx-svc.yaml的Service,并且公开应用。
kubectl apply -f nginx-svc.yaml
执行以下命令,确认NodePort类型的Service成功创建。
kubectl get svc my-nginx-svc
预期输出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-svc NodePort 192.168.xxx.xxx <none> 80:31309/TCP 3s
执行以下命令,访问示例应用。
curl <Node-IP>:31309 # 请将<Node-IP>替换为您需要访问的节点地址。
文档内容是否对您有帮助?