加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

一篇文章为你图解Kubernetes网络通信原理

发布时间:2019-08-29 20:50:27 所属栏目:教程 来源:云端密码
导读:名词表明 1、收集的定名空间:Linux在收集栈中引入收集定名空间,将独立的收集协议栈断绝到差异的呼吁空间中,互相间无法通讯;docker操作这一特征,实现不容器间的收集断绝。 2、Veth装备对:也叫假造收集接口对。Veth装备对的引入是为了实此刻差异收集命
副问题[/!--empirenews.page--]

一篇文章为你图解Kubernetes收集通讯道理

名词表明

1、收集的定名空间:Linux在收集栈中引入收集定名空间,将独立的收集协议栈断绝到差异的呼吁空间中,互相间无法通讯;docker操作这一特征,实现不容器间的收集断绝。

2、Veth装备对:也叫假造收集接口对。Veth装备对的引入是为了实此刻差异收集定名空间的通讯。

3、Iptables/Netfilter:Netfilter认真在内核中执行各类挂接的法则(过滤、修改、扬弃等),运行在内核 模式中;Iptables模式是在用户模式下运行的历程,认真帮忙维护内核中Netfilter的各类法则表;通过二者的共同来实现整个Linux收集协议栈中机动的数据包处理赏罚机制。

4、网桥:网桥是一个二层收集装备,通过网桥可以将linux支持的差异的端口毗连起来,并实现相同互换机那样的多对多的通讯。

5、路由:Linux体系包括一个完备的路由成果,当IP层在处理赏罚数据发送或转发的时辰,会行使路由表来抉择发往那边。

令人头大的收集模子

Kubernetes对集群内部的收集举办了从头抽象,以实现整个集群收集扁平化。我们可以领略收集模子时,可以完全抽离物理节点去领略,我们用图措辞,先有根基印象。

一篇文章为你图解kubernetes收集通讯道理

个中,重点讲授以下几个要害抽象观念。

一个Service

Service是Kubernetes为为屏障这些后端实例(Pod)的动态变革和对多实例的负载平衡而引入的资源工具。Service凡是与deployment绑定,界说了处事的会见进口地点,应用(Pod)可以通过这个进口地点会见其背后的一组由Pod副本构成的集群实例。Service与厥后端Pod副本集群之间则是通过Label Selector来实现映射。

Service的范例(Type)抉择了Service怎样对外提供处事,按照范例差异,处事可以只在Kubernetes cluster中可见,也可以袒露到集群外部。Service有三种范例,ClusterIP,NodePort和LoadBalancer。详细的行使场景会在下文中举办叙述。

在测试情形查察:

  1. $ kubectl get svc --selector app=nginx 
  2. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE 
  3. nginx ClusterIP 172.19.0.166 <none> 80/TCP 1m 
  4. $ kubectl describe svc nginx 
  5. Name: nginx 
  6. Namespace: default 
  7. Labels: app=nginx 
  8. Annotations: <none> 
  9. Selector: app=nginx 
  10. Type: ClusterIP 
  11. IP: 172.19.0.166 
  12. Port: <unset> 80/TCP 
  13. TargetPort: 80/TCP 
  14. Endpoints: 172.16.2.125:80,172.16.2.229:80 
  15. Session Affinity: None 
  16. Events: <none> 

上述信息中该svc后端署理了2个Pod实例:172.16.2.125:80,172.16.2.229:80

二个IP

Kubernetes为描写其收集模子的IP工具,抽象出Cluster IP和Pod IP的观念。

PodIP是Kubernetes集群中每个Pod的IP地点。它是Docker Engine 按照docker0网桥的IP地点段举办分派的,是一个假造的二层收集。Kubernetes中Pod间可以或许互相直接通信,Pod里的容器会见其它一个Pod里的容器,是通过Pod IP地址举办通讯。

Cluster IP仅浸染于Service,其没有实体工具所对应,因此Cluster IP无法被ping通。它的浸染是为Service后端的实例提供同一的会见进口。当会见ClusterIP时,哀求将被转发到后端的实例上,默认是轮询方法。Cluster IP和Service一样由kube-proxy组件维护,着实现方法首要有两种,iptables和IPVS。在1.8版本后kubeproxy开始支持IPVS方法。在上例中,SVC的信息中包括了Cluster IP。

这里未列出nodeip观念,因为其自己是物理机的网卡IP。因此可领略为nodeip就是物理机IP。

三个Port

在Kubernetes中,涉及容器,Pod,Service,集群各等多个层级的工具间的通讯,为在收集模子中区分各层级的通讯端口,这里对Port举办了抽象。

Port

该Port非一样平常意义上的TCP/IP中的Port观念,它是特指Kubernetes中Service的port,是Service间的会见端口,譬喻Mysql的Service默认3306端口。它仅对进群内容器提供会见权限,而无法从集群外部通过该端口会见处事。

nodePort

nodePort为外部呆板提供了会见集群内处事的方法。好比一个Web应用必要被其他用户会见,那么必要设置type=NodePort,并且设置nodePort=30001,那么其他呆板就可以通过赏识器会见scheme://node:30001会见到该处事,譬喻http://node:30001。

targetPort

targetPort是容器的端口(最基础的端口进口),与建造容器时袒露的端口同等(DockerFile中EXPOSE),譬喻docker.io官方的nginx袒露的是80端口。

举一个例子来看怎样设置Service的port:

  1. kind: Service 
  2. apiVersion: v1 
  3. metadata: 
  4.  name: mallh5-service 
  5.  namespace: abcdocker 
  6. spec: 
  7.  selector: 
  8.  app: mallh5web 
  9.  type: NodePort 
  10.  ports: 
  11.  - protocol: TCP 
  12.  port: 3017 
  13.  targetPort: 5003 
  14.  nodePort: 31122 

这里举出了一个service的yaml,其陈设在abcdocker的namespace中。这里设置了nodePort,因此其范例Type就是NodePort,留意巨细写。若没有设置nodePort,那这里必要填写ClusterIP,即暗示只支持集群内部处事会见。

集群内部通讯

单节点通讯

集群单节点内的通讯,首要包罗两种环境,统一个pod内的多容器间通讯以及统一节点差异pod间的通讯。因为不涉及跨节点会见,因此流量不会颠末物理网卡举办转发。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读