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 就可以了

最后修改:2023 年 07 月 26 日
如果觉得我的文章对你有用,请随意赞赏