逻辑上的一组 Pod,一种可以访问他们的策略。
需要通过选择算符来确定。

01 定义 Service

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: my-service
  5. spec:
  6. # 服务类型,默认是 ClusterIP
  7. type: ClusterIP
  8. # 指定 ClusterIP,不指定,则随机,必须在service-cluster-ip-range 范围内
  9. clusterIP: 10.1.1.1
  10. # 会话关联
  11. sessionAffinity: "clientIP"
  12. # 控制来自于外部的流量是如何路由的。 可选值有 Cluster 和 Local
  13. externalTrafficPolicy: "Cluster"
  14. # 控制内部来源的流量是如何转发的。可设置的值有 Cluster 和 Local
  15. internalTrafficPolicy: "Cluster"
  16. selector:
  17. app: MyApp
  18. ports:
  19. - name: http
  20. protocol: TCP
  21. port: 80
  22. targetPort: 9376
  23. # 多端口的 Service
  24. - name: https
  25. protocol: TCP
  26. port: 443
  27. targetPort: 9377
  • 创建一个 my-service 的 service 对象
  • 将请求代理到 TCP 端口 9376
  • Pod 标签: “app=MyApp”
  • K8S 为改服务分配一个 IP 地址 (Cluster IP)
  • 根据 Pod 标签匹配 Pod,然后也发布到也称为 “my-service”的 EndPoint 对象

自动创建 EndPoint 对象?

02 定义没有选择符的 Service

apiVersion: v1
kind: Service
metadata:
    name: my-service
spec:
  ports:
      - protocol: TCP
        port: 80
      targetPort: 9376

不会自动创建 EndPoint 对象,需要手动添加 EndPoint 对象。如何创建 EndPoints 对象参考:

EndPoints 对象

03 访问服务

03-1 userspace 代理模式

03-2 iptables 代理模式

03-3 IPVS 代理模式