三种类型:
- ClusterIP
- NodePort
- LoadBalancer
- ExternalName
- ExternalIP
- Ingress
不是服务类型,它可以将路由规则整合到一个资源中,因为它可以在同一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 一起来指定?
