在Kubernetes中,Pod虽然拥有独立的IP,但会被快速地创建和删除,因此无法直接对外提供服务。而服务(Service)能够解耦前端和后端的关联,从而实现松耦合的微服务设计。本文介绍如何通过控制台和Kubectl方式创建、更新和删除服务。
控制台操作指导
Kubectl操作指导
Service YAML示例
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet"
labels:
app: nignx
name: my-nginx-svc
namespace: default
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
type: LoadBalancer
字段 | 说明 |
---|---|
kind |
定义资源对象为Service。 |
metadata |
定义Service的名称、Label和命名空间等基本信息。 |
metadata.annotations |
容器服务ACK支持丰富的负载均衡相关的注解(Annotations)。例如,在上面的YAML示例中,service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type 指定Service的访问方式为intranet (私网访问)。更多注解,请参见通过Annotation配置负载均衡。
|
spec.selector |
定义Service的选择器。Service会根据Selector和Pod Label的匹配关系,确定Service所要关联暴露的后端Pod。 |
spec.ports.port |
定义Service暴露给ClusterIP的端口,集群内部客户端访问Service的入口,即clusterIP:port 。
|
spec.ports.targetPort |
定义后端Pod的端口。从port 进来的流量,经由kube-proxy流入到后端Pod的targetPort 上,最后进入容器。
|
spec.type |
定义Service的被访问方式。
|
创建Service
更新Service
- 方式1:执行以下命令,更新Service。
kubectl edit service my-nginx-svc
- 方式2:手动删除旧的Service,修改YAML文件后,重新创建Service。
kubectl apply -f my-nginx-svc.yaml
查看Service
执行以下命令,查看Service。
kubectl get service my-nginx-svc
预期输出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-nginx-svc LoadBalancer 172.21.XX.XX 192.168.XX.XX 80:31599/TCP 5m
删除Service
执行以下命令,删除Service。
kubectl delete service my-nginx-svc
外部流量策略功能对比
集群中使用的网络插件不同,外部流量策略功能不同,以下介绍Terway-Eniip和Flannel网络插件的外部流量策略功能对比。
Flannel网络插件
Flannel网络插件下,流量经由节点的NodePort转发到Pod中。
- Local:流量只转发给本机的Pod。
- Cluster:流量可以转发到集群中其他节点上的Pod。

Local和Cluster两种外部流量策略详细的区别如下表所示。
比较项 | Local | Cluster |
---|---|---|
负载均衡后端挂载行为 | 仅Pod所在的节点会挂载到负载均衡后端。 | 所有集群内的节点都将挂载到负载均衡后端。 |
负载均衡配额 | 负载均衡配额消耗较少。关于负载均衡配额的详细介绍,请参见配额限制。 | 由于集群内所有节点都挂载到负载均衡后端,因此会大量消耗负载均衡配额。关于负载均衡配额的详细介绍,请参见配额限制。 |
访问负载均衡地址 | 仅Pod所在节点可以访问负载均衡地址。 | 集群内任意节点均可访问负载均衡地址。 |
Pod负载均衡 |
默认Pod之间负载不均衡。 如果您想要实现Pod之间负载均衡,需要指定策略为wrr,即为Service添加 |
默认Pod之间负载均衡。 |
保留来源IP | 支持。 | 不支持。 |
会话保持 | 支持。 | 不支持。 |
Terway-Eniip网络插件
Terway-Eniip网络插件下,无论是Local和Cluster,流量直接转发到Pod中。

Local和Cluster两种外部流量策略详细的区别如下表所示。
比较项 | Local | Cluster |
---|---|---|
负载均衡后端挂载行为 | Pod直接挂载到负载均衡后端。 | |
负载均衡配额 | 仅挂载业务Pod,负载均衡配额消耗较少。关于负载均衡配额的详细介绍,请参见配额限制。 | |
访问负载均衡地址 | 仅Pod所在节点可以访问负载均衡地址。 | 集群内任意节点均可访问负载均衡地址。 |
Pod负载均衡 | 默认Pod之间负载均衡。 | |
保留来源IP | 支持。 | |
会话保持 | 支持。 |