Service:原生的服务发现机制
通过 Service 的 pod selector 可以绑定一组 pod 的 ip
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend
......
spec:
......
template:
metadata:
labels:
app: backend # Pod Label 字段
apiVersion: v1
kind: Service
metadata:
name: backend-service
labels:
app: backend
spec:
type: ClusterIP
sessionAffinity: None
selector:
app: backend
ports:
- port: 5000
targetPort: 5000
在这个配置中,selector 指定了名为 backend 的 Pod
当我们在 Service 里使用 Pod 选择器时,我们并不需要主动去创建 Endpoints 对象。在创建 Service 之后,K8s 会自动帮助我们创建 Endpoint
Service 域名
apiVersion: v1
kind: Service
metadata:
name: backend-service
labels:
app: backend
spec:
type: ClusterIP
selector:
app: backend
ports:
- port: 5000
targetPort: 5000
里面的name: backend-service
即为域名,通过拼接:{$service_name}.{$namespace}.svc.cluster.local
就可以访问到这个 Service 服务啦。
当请求发起方和目标 Service 在同一个命名空间下时,我们可以省略 namesapce.svc.cluster.local,也就是说,只需要请求 Service 的全称即 backend-service 就可以了