三种类型:

  • ClusterIP
  • NodePort
  • LoadBalancer
  • ExternalName
  • ExternalIP
  • Ingress
    1. 不是服务类型,它可以将路由规则整合到一个资源中,因为它可以在同一IP地址下公开多个服务

01 NodePort

apiVersion: v1
kind: Service
metadata:
    name: my-service
spec:
    # 服务类型,默认是 ClusterIP
  type: NodePort
  # 指定 ClusterIP,不指定,则随机,必须在service-cluster-ip-range 范围内
  # clusterIP: 10.1.1.1
  # 会话关联
  sessionAffinity: "clientIP"
  # 控制来自于外部的流量是如何路由的。 可选值有 Cluster 和 Local
  externalTrafficPolicy: "Cluster"
  # 控制内部来源的流量是如何转发的。可设置的值有 Cluster 和 Local
  internalTrafficPolicy: "Cluster"
    selector:
      app: MyApp
  ports:
    - name: http
        protocol: TCP
        port: 80
      targetPort: 9376
      # 可选字段,默认由 控制平面自动分配,每个节点都会分配相同的端口
      nodePort: 30007
     # 多端口的 Service
     - name: https
       protocol: TCP
       port: 443
       targetPort: 9377

02 LoadBalancer

apiVersion: v1
kind: Service
metadata:
    name: my-service
spec:
    # 服务类型,默认是 ClusterIP
  type: LoadBalancer
    selector:
      app: MyApp
status:
    loadBalancer:
      ingress:
        - ip: 192.0.2.127

自外部负载均衡器的流量将直接重定向到后端 Pod 上,不过实际它们是如何工作的,这要依赖于云提供商

03 ExternalName

apiVersion: v1
kind: Service
metadata:
    name: my-service
  namespace: prod
spec:
    # 服务类型,默认是 ClusterIP
  type: ExternalName
  externalName: my.database.example.com

相当于 DNS 记录会添加:
my-service.prod.svc.cluster.local cname my.database.example.com
访问 my-service.prod 会发生在 DNS 级别,而可不是直接代理或者转发。

04 ExternalIP

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: MyApp
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 9376
  externalIPs:
    - 80.11.12.10

外部IP 可以和任何 ServiceType 一起来指定?