Port

Service中主要涉及三种Port: 
`port` 这里的port表示service暴露在clusterIP上的端口,clusterIP:Port 是提供给集群内部访问kubernetes服务的入口。
targetPort是pod上的端口,从port和nodePort上到来的数据最终经过kube-proxy流入到后端pod的targetPort上进入容器。

nodePort
nodeIP:nodePort 是提供给从集群外部访问kubernetes服务的入口。

总的来说,port和nodePort都是service的端口,前者暴露给从集群内访问服务,后者暴露给从集群外访问服务。从这两个端口到来的数据都需要经过反向代理kube-proxy流入后端具体pod的targetPort,从而进入到pod上的容器内。

 IP
使用Service服务还会涉及到几种IP:

ClusterIP
Pod IP 地址是实际存在于某个网卡(可以是虚拟设备)上的,但clusterIP就不一样了,没有网络设备承载这个地址。它是一个虚拟地址,由kube-proxy使用iptables规则重新定向到其本地端口,再均衡到后端Pod。当kube-proxy发现一个新的service后,它会在本地节点打开一个任意端口,创建相应的iptables规则,重定向服务的clusterIP和port到这个新建的端口,开始接受到达这个服务的连接。

Pod IP
Pod的IP,每个Pod启动时,会自动创建一个镜像为gcr.io/google_containers/pause的容器,Pod内部其他容器的网络模式使用container模式,并指定为pause容器的ID,即:network_mode: "container:pause容器ID",使得Pod内所有容器共享pause容器的网络,与外部的通信经由此容器代理,pause容器的IP也可以称为Pod IP。

节点IP
Node-IP,service对象在Cluster IP range池中分配到的IP只能在内部访问,如果服务作为一个应用程序内部的层次,还是很合适的。如果这个service作为前端服务,准备为集群外的客户提供业务,我们就需要给这个服务提供公共IP了。指定service的spec.type=NodePort,这个类型的service,系统会给它在集群的各个代理节点上分配一个节点级别的端口,能访问到代理节点的客户端都能访问这个端口,从而访问到服务
--------------------- 

1、Nodeport 外部访问:nodeIP:nodePort
    将service port映射到每个节点node的同一端口,可通过nodeIP:nodeport从集群外访问
2、loadbalance  在Nodeport基础上加一个四层(TCPIP)负载均衡器)负载均衡器
    暴露的externalIP从IP池分配(付费)用于公网    port-》nodeport—》targetport
    port配置yaml如下
spec:
    clusterIP: 172.16.45.132
    externalTrafficPolicy: Cluster
    ports:
    - name: port-0
      nodePort: 32223
      port: 5001
      protocol: TCP
      targetPort: 5001
    - name: port-1
      nodePort: 30683
      port: 5002
      protocol: TCP
      targetPort: 5002
    selector:
      app: lzimds
      version: 0.0.2
    sessionAffinity: None
    type: LoadBalancer

3、Ingress  应用层(七层负载)均衡  (域名)
    endpoints表示service对应的pod访问地址(podIP:port)  用于更新监听的pod变化

1.Endpoints表示一个Service对应的所有Pod副本的访问地址,而Endpoints Controller就是负责生成和维护所有Endpoints对象的控制器.它负责监听Service和对应的Pod副本的变化,如果检测到Service被删除,则删除和该Service同名的Endpoints对象。如果检测到新的Service被创建或者修改则根据该Service信息获得相关的Pod列表,然后创建或者更新Service对应的Endpoints对象。

2.Node上的Kube-proxy进程获取每个Service的Endpoints,实现Service的负载均衡功能。

3.Service Controller属于Kubernetes集群与外部云平台之间的一个接口控制器。