grpc通信原理_《蹲坑学K8S》之19-3:Flannel通信原理

247982d2a2631f1999b1315b8384fc77.gif

本章节主要学习Flannel网络是如何通信,从而深刻理解从内部到外部,从外部到内部的资源访问。

一、container-container通信原理解析

这种场景对于Kubernetes来说没有任何问题,根据Kubernetes的架构设计。Kubernetes创建Pod时,首先会创建一个pause容器,为Pod指派一个唯一的IP地址。然后,以pause的网络命名空间为基础,创建同一个Pod内的其它容器(–net=container:xxx)。因此,同一个Pod内的所有容器就会共享同一个网络命名空间,在同一个Pod之间的容器可以直接使用localhost进行通信。

二、Pod-Pod通信原理解析

flannel会在每一个宿主机上运行名为flanneld代理,其负责为宿主机预先分配一个子网,并为Pod分配IP地址。同时,Flannel使用etcd来存储网络配置、分配的子网和主机公共IP等信息。数据包则通过VXLAN、UDP或host-gw等转发类型的后端机制进行数据转发。

1、在同一个Node节点中不同Pod间通信

d1a1e0aa4ec22e4ac985eb26fb470c46.png

(1)查看k8s-node-1中Pod运行状态

bea269a53537017721d3bcba04ad8d35.png

(2)查看k8s-node-1的IP地址以及路由

2ac50bd4f6100af3533dcbd5dabce9aa.png
af4dfe2d4260e9fa236b7474dac99192.png

(3)查看k8s-node-1中Pod的IP地址

1c77b031e5f4e52b3ed79c408470c614.png

Pod-1:

233332436e99431af896b39651aa2570.png

Pod-2:

26124f63a32ef8c2e2c51cd72eeee1dc.png

(4)测试连通性

0fb18197286a15a1b9c0377cd2ec9065.png

2、在不同Node节点间不同Pod间通信

7f9ff0c4d5fa1d0c97759cc7e4ee5ab7.png

(1)查看Pod运行状态

63f6a5bf2a11319dafd291caeee4b283.png

(2)查看Node节点上的IP地址:

K8s-Node-1:

99cae995c9a7b5fa72529d154f36fbc1.png

K8s-Node-2:

8b9f6fa378b21757049a8babf8989816.png

(3)查看k8s-Node-1的Pod-1和k8s-Node-2的Pod-3的IP地址

Pod-1:

34d9ec2b77ded358d1fa26361881656e.png

Pod-3:

dfe2533b273671ebeac6d2604bbf9a38.png

(4)测试连通性

0a99a47e12de467630e4c09c341b56b8.png

三、Pod-Service通信原理解析

Service是Kubernetes中最核心的概念,正是因为对此概念的支持,Kubernetes在某种角度下可以被看成是一种微服务平台。Kubernetes中的pod并不稳定,比如由ReplicaSet、Deployment、DaemonSet等副本控制器创建的pod,其副本数量、pod名称、pod所运行的节点、pod的IP地址等,会随着集群规模、节点状态、用户缩放等因素动态变化。Service是一组逻辑pod的抽象概念,分配一个虚拟网络,为一组pod提供统一入口,用户只需与service打交道,service提供DNS解析名称,负责追踪pod动态变化并更新转发表,通过负载均衡算法最终将流量转发到后端的pod。

创建一个service时,相应会创建一个指向这个service的域名,域名规则为{服务名}.{namespace}.svc.{集群名称}。全部为iptables维护和转发。iptables则由kubelet维护。service仅支持udp和tcp协议,所以ping的icmp协议是用不了的,无法ping通service ip。

ce4e393e70260480c94ba60691625c0d.png

1、查看DNS

791f5b0f3f74b48987eb0f55c02afa22.png

2、查看Pod

5f0f76917bc061c59e0d735df2daf475.png

3、查看service

70b95fc3ea77c2a76b129e721f388145.png

4、查看service详细信息

2b7c2d8a5ae74bb14039b960d9db4912.png

四、Pod与外部通信原理

1、Pod访问外部

(1)查看Pod的解析记录

2cf73166d1b0bea9511525f7365ba4df.png

(2)查看去外网的路由表

49272c37aa89529180a09801a39ce8a4.png

(3)测试与外网的连通性

605614eca696994b9b8518c0d21d9760.png

2、外部访问内部群集

将服务暴露给外部客户端,以便外部访问kubernetes群集。方法有很多种,在这里介绍以下两种方式以便理解去原理:

(1)将服务的类型设置成NodePort

NodePort 服务是引导外部流量到你的服务的最原始方式。NodePort,正如这个名字所示,在所有节点(虚拟机)上开放一个特定端口,任何发送到该端口的流量都被转发到对应服务。

c2eaff1cfdc2587e76554d4d2ef563e4.png

(2)将服务的类型设置成LoadBalance

LoadBalancer 服务是暴露服务到 internet 的标准方式。在 GKE 上,这种方式会启动一个Network Load Balancer,它将给你一个单独的 IP 地址,转发所有流量到群集中的服务。kubernetes默认应用此方式。所有通往你指定的端口的流量都会被转发到对应的服务。它没有过滤条件,没有路由等。这意味着你几乎可以发送任何种类的流量到该服务,像 HTTP,TCP,UDP,Websocket,gRPC 或其它任意种类。

这个方式的最大缺点是每一个用LoadBalancer暴露的服务都会有它自己的IP地址,每个用到的LoadBalancer都需要付费,这将是非常昂贵的。

e0155cfefae832619257510d5fd3199e.png

1、查看service相信信息

27a2e25764a6fa7367c7ef073eabe4f8.png

2、从外部访问内部Pod资源

72153f92e139112aa7ad476dfac618c8.png
bc9568092ef15893016d82388e882721.png

54cf4039287ba699f14e1368c61ccbd2.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值