k8s之service

什么是service?


k8s每次构建pod的时候ip地址都会变化,pod之间直接访问就会有问题,不能每次重建pod的时候手动修改pod的ip地址,如果pod之间加上一个固定的访问接口就可以解决访问的问题。 比如nginx调用tomcat,正常的访问都是通过添加nginx的upstream添加固定的node地址去轮询访问,容器化后每次重新构建tomcat后ip地址 都会发生变化,这样我们就需要每次重建后都需要更改配置。这样一来使用过程很糟糕,我们可以把service想象成一个服务的接口,nginx访问不直接访问tomcat而是去访问tomcat的service 这样一来无论tomcat的ip怎么变化,我们只需要访问tomcat的service就可以了。


service的访问流程
kube-proxy监听着k8s-apiserver,一旦service资源发生变化(调k8s-api修改service信息),kube-proxy 就会生成对应的负载调度的调整,这样就保证service的最新状态
1、访问宿主机暴露的端口,然后转到notpod网卡
2、notpod访问的信息转到service中
3、通过service中查询nameservice中的label标签进行调度到pod节点

service常用的暴露接口的方式
1、NodePort:在Node节点上监听端口,来访问service的服务。
2、ClusterIP:此ip仅在k8s内部访问。

yaml格式模版

kind: Service      #指定资源对象
apiVersion: v1    #版本
metadata:        #元数据
  labels:
     app: lhl-nginx-service       #service的标签
  name: bhb-nginx-service     #service的名称
  namespace: lhl                   #指定在lhl的ns中创建
spec:
  type: NodePort       #暴露方式
  ports:
    – name: http  
       port: 80    #service端口
       targetPort: 80  #pod端口
       nodePort: 43990   #node节点暴露端口
  selector:
    app: nginx-app1  #把消息指定转发到lhl的ns下pod有app: nginx-app1 的标签