一、K8s Service 简介
Service 是 k8s 网络部分的核心概念,在 k8s 中,Service 主要担任了四层负载均衡的职责。 Service 是主要用来实现应用程序对外提供服务的机制。
如上图所示,Service 是对 Pod 的一层抽象,主要通过 TCP/IP 机制及监听 IP 和端口号来对外提供服务。与 Pod 不同的是,Service 一旦创建,系统会为其分发一个 ClusterIP (也可以自己指定),且在其生命周期内不会发生变化。
二、Cluster Network演示
准备工作 创建2个pod
进入dev虚机上
cd ~
cd deployk8s-master/
cd pod-basic/
kubectl create -f pod_nginx.yml
kubectl create -f pod_tomcat.yml
进入node节点
- 21,22,23 分别ping下pod的节点看能否ping通
ping nginx 都是可以ping通的
ping tomcat 都是可以ping通的
说明pod节点直接都是互相通信的
进入这3个node节点发现
他们都使用了Flannel的网络
详细看看官网怎么说
https://kubernetes.io/docs/concepts/cluster-administration/networking/
- all containers can communicate with all other containers without NAT
所有的容器和其他所有的容器之间可以直接通信,不需要经过NAT的转化 - all nodes can communicate with all containers (and vice-versa) without NAT
所有的节点可以直接访问其他节点的容器。 - the IP that a container sees itself as is the same IP that others see it as
容器自己的ip是什么别人直接访问他的时候就可以用这个ip地址。
k8s开源社区的插件太多了,支持插件的的,很早以前docker是不支持网络插件的,k8s的网络插件可以更方便的打通容器和节点。
flannel主要提供了跨主机间的容器通信;
- 在kubernetes的Pod、Service模型里,kube-proxy又借助iptables实现了Pod和Service间通信。
- 基于这种网络访问功能,我们平台提供了以下功能:
- 基于gorouter提供的平台域名的访问 – watch k8s endpoints event管理router信息;
4 .基于skydns并定制化kube2sky组件和kubelet,提供同一命名空间下应用(Pod)之间基于业务域名的访问 – kube2sky基于k8s Service annotation解析并注册域名信息、kubelet设置容器启动时的domain search及外部dns; - 实现容器tty访问控制台 – 每台k8s node部署平台组件 tty agent(根据Pod所属node信息, 建立对应k8s结点的tty连接);
PS:基础网络方便的通信使用k8s提供的满足它要求的插件。下节我们一起坐下如何让pod可以外部来访问。