K8S 之 Service
摘要
-
本文介绍 K8S 的 Service ,本文以 CentOS 8 为例。
Service 介绍
-
Service是一个抽象层,它定义了一组Pod的逻辑集,并为这些Pod支持外部流量暴露、负载均衡和服务发现。
-
尽管每个Pod 都有一个唯一的IP地址,但是如果没有Service,这些IP不会暴露在群集外部。
-
Service允许您的应用程序接收流量。
-
Service也可以用在ServiceSpec标记type的方式暴露,type类型如下:
- ClusterIP(默认):在集群的内部IP上公开Service。这种类型使得Service只能从集群内访问。
- NodePort:使用NAT在集群中每个选定Node的相同端口上公开Service。使用
: 从集群外部访问Service。是ClusterIP的超集。 - LoadBalancer:在当前云中创建一个外部负载均衡器(如果支持的话),并为Service分配一个固定的外部IP。是NodePort的超集。
- ExternalName:通过返回带有该名称的CNAME记录,使用任意名称(由spec中的externalName指定)公开Service。不使用代理。
创建Service
命令行方式
1 | # 先创建deployment,此时会为每个pod添加一个label app=nginx |
yaml文件创建service
-
yaml文件格式
1 | apiVersion: v1 # api版本 |
-
这里有个问题需要注意,service 默认是通过
标签
来匹配pod的,所以创建service的时候,一定要保证pod的标签是存在的,否则service无法匹配pod,另外虽然我们通过命令行创建service时是通过kubectl expose deployment nginx --type=NodePort --port=80
创建的,但也并不表示service只会匹配这个deployment创建的pod,而是会匹配所有具有指定标签的pod(app=nginx)。
1 | # 获取service的 selector |
访问service,轮询pod
1 | ## 在集群内,通过 CLUSTER-IP 访问 |
管理service
-
查看service
1 | # 查看service |
-
编辑service,保存(:wq)后生效,不需要额外 apply 或 restart
1 | kubectl edit svc nginx |
-
删除service
1 | kubectl delete svc nginx |