一般 pod 都是根据 service 资源来进行集群内的暴露,因为 k8s 在 pod 启动前就已经给调度节点上的 pod 分配好 ip 地址了,因此我们并不能提前知道提供服务的 pod 的 ip 地址。那么 service 服务提供的功能就是,使用者根本无需关心后端提供服务 pod 的数量,以及各自对应的 ip 地址。
服务资源会被 k8s 分配一个 cluster-ip 集群 ip,只能在集群内部可以被访问。而在集群内 k8s 如何配置服务网络的,可以参考之前的网络服务,实际上就是利用 iptables 来进行网络的配置。除此之外 k8s 还可以配置会话的亲和性,因为有可能需要请求落入容一个pod,设置服务的 sessionAffinity 属性为 clientIP。
apiVersion: v1
kind: Service
spec:
sessionAffinity: ClientIP
k8s 必须在支持 LoadBalance 服务的环境下才能创建此类型的负载均衡器服务。声明如下
apiVersion: v1
kind: Service
metadata:
name: kubia-loadbalancer
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 8080
selector:
app: kubia
那么 nodeport 和 LB 类型的有什么不同呢?
$ kubectl get svc kubia-nodeport
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubia-nodeport NodePort 10.99.194.15 <nodes> 9000:31090/TCP 1m
$ kubectl get svc kubia-nodeport
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubia-loadbalance LoadBalancer 10.99.194.15 130.211.53.173 80:32143/TCP 1m
注意的是在