配置清单重要字段:
apiVersion:
kind:
metadata:
spec:
clusterIP: 可以自定义,也可以动态分配
ports:(与后端容器端口关联)
selector:(关联到哪些pod资源上)
type:服务类型
清单举例:
[root@master manifests]# vim redis-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: redis
namespace: default
spec:
selector:
app: redis
role: logstore
clusterIP: 10.97.97.97
type: ClusterIP
ports:
- port: 6379 #容器端口
targetPort: 6379 #Pod端口
创建服务:
[root@master manifests]# kubectl apply -f redis-svc.yaml
service/redis created
[root@master manifests]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1
redis ClusterIP 10.97.97.97
查看服务:
[root@master manifests]# kubectl describe svc redis
Name: redis
Namespace: default
Labels:
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{“apiVersion”:”v1”,”kind”:”Service”,”metadata”:{“annotations”:{},”name”:”redis”,”namespace”:”default”},”spec”:{“clusterIP”:”10.97.97.97”,”…
Selector: app=redis,role=logstore
Type: ClusterIP
IP: 10.97.97.97 #service ip
Port:
TargetPort: 6379/TCP
Endpoints: 10.244.2.43:6379 #此处的ip+端口就是pod的ip+端口
Session Affinity: None
Events:
[root@master manifests]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
filebeat-ds-h8rwk 1/1 Running 0 8m36s 10.244.1.39 node01
filebeat-ds-kzhxw 1/1 Running 0 8m36s 10.244.2.44 node02
readiness-httpget-pod 1/1 Running 0 2d21h 10.244.2.18 node02
redis-76c85b5744-94djm 1/1 Running 0 8m36s 10.244.2.43 node02
总结:
- service不会直接到pod,service是直接到endpoint资源,就是地址加端口,再由endpoint再关联到pod
- service只要创建完,就会在dns中添加一个资源记录进行解析,添加完成即可进行解析,资源记录的格式为:SVC_NAME.NS_NAME.DOMAIN.LTD.
- 默认的集群service 的A记录:svc.cluster.local.
- redis服务创建的A记录:redis.default.svc.cluster.local.
相关文档:https://blog.csdn.net/kenkao/article/details/87375435
相关文档:https://www.cnblogs.com/wlbl/p/10694316.html