k8s容器的服务service实现有以下常用方式:
用于为集群外部访问Service后面Pod提供访问接入端口。
开发测试环境,可以使用这种方式,不依赖其他中间件。
好处是,可以访问Node节点的IP+${NodePort}
比如Node节点的IP地址是192.168.80.180,NodePort的端口是31767。那么外部访问地址是http://192.168.80.180:31767/doc.html。
当K8s运行在一个云环境内时, LB类型可自动触发创建一个软件负载均衡器用于对Service做负载均衡调度.
因为外部所有Client都访问一个NodeIP, 该节点的压力将会很大, 而LoadBalancer则可解决这个问题。
而且它还直接动态监测后端Node是否被移除或新增了,然后动态更新调度的节点数。
默认类型,会自动分配一个内部IP,但是外部无法访问。
用于将集群外部的服务引入到集群内部,在集群内部可直接访问来获取服务。
适用于大多数服务已转移部署到K8S中,而少部分旧服务还部署在ECS。
第一步,申请新的slb实例,这里是一个内网网络。
(当然,你也可以使用lvs实现负载均衡,因为我们服务都部署在阿里云,直接购买的是负载均衡服务)
第二步,新增监听8899端口
(当然,你不用手动创建,在k8s容器侧操作即会自动创建监听。)
service.yaml详情:
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alicloud-loadbalancer-address-type: intranet
service.beta.kubernetes.io/alicloud-loadbalancer-force-override-listeners: 'true'
service.beta.kubernetes.io/alicloud-loadbalancer-id: ${slb的实例ID}
labels:
service.k8s.alibaba/loadbalancer-id: ${slb的实例ID}
name: xxx-service
namespace: java-service
spec:
allocateLoadBalancerNodePorts: true
externalTrafficPolicy: Cluster
internalTrafficPolicy: Cluster
ports:
- name: xxx-service
port: 8899
protocol: TCP
targetPort: 8899
selector:
app: xxx-service
sessionAffinity: None
type: LoadBalancer
注意,${slb的实例ID} 修改为你上文申请的SLB的实例ID值。
关键信息是type: LoadBalancer,指明service的实现类型是LB。
selector: app: xxx-service 对应pod的labels。
本文主要讲述的是,如何在云环境下的k8s容器里, 暴露服务service的时候,使用slb实现对外访问。