K8s-基础(网络通讯)
2024-06-25 17:46:24 0 举报
"K8s-基础(网络通讯)"是一份关于Kubernetes网络通讯的核心内容文件。这份文件详细介绍了Kubernetes中的网络通讯原理,包括服务发现、负载均衡、网络策略等方面。此外,文件还涵盖了Kubernetes的网络模型、网络插件等关键概念。通过这份文件,读者可以深入了解Kubernetes网络通讯的本质和工作原理,为实际项目提供有力支持。
作者其他创作
大纲/内容
3.3.3.3
有相同Label的Pod
Docker daemon
2. access(nat模型转发)
apiserver
VM
POD
Kube DNS
Node
scheduler
Load-Balancer
K8sCLuster
user space
172.17.0.0/24
service
调用CcientIP
10.98.2.79:80 -> 10.165.0.2:98231
2. 集群网络(ipvs)
kube-proxy
node1
Master node
192.168.2.3/24
节点网络
Node2
flanneld:8285
将Pod 绑定到指定节点
soft-new-bridge(docker0)
192.168.1.3/24
数据检验等操作
soft-bridge(docker0)
S
1. access
3. POD网络
service ip(iptables / ipvs)
container2
2
netstack
controller
ETCD-3
NodePort
service(NodeIP)
Service
CPU
controller-manager
eth010.100.0.2
服务发现
Mem
accounting
pause
100.96.2.1/24
100.96.2.0/16
RR
Iptables
Node1
kubelet
100.96.1.0/16
Kube-Proxy
4
(iptables / ipvs)
c3
DaemonSet
10.165.0.3:80
CNI(作为节点、或者守护进程运行): flannel(叠加网络): 网络配置 calico(三层隧道网络):网络配置、网络策略 也可以使用BGP协议的直接路由模型 canel: cellicum
Service 网络
评分
Kernel Space
返回spec.nodeName 为该节点的POD
container1
Bins/Libs
UserSpace
docker build
ETCD-2
CONTAINER
c1
kernel space
监听服务更新
Global Newwork Namespace
FDB
OS-Kernel
rule upd
VmBus
写入数据
docker0172.17.0.1
veth0172.17.0.3
None-2100.96.1.3
pod
App C
docker pull
5
CSI容器存储接口
监听分配给自己的POD
KubeProxy
订阅事件
response
Container
flanneld
Ingress
1
eth1
3
Netfilter
None-1100.96.1.2
ipv4
App B
1. 节点网络
Work node
更新Pod状态等信息
Upstream Ip自动注入
负载均衡调用
二层:硬件网卡三层:网络虚拟化Linux-BridgeOVS: Open VSwitchSDN
污点
veth0172.17.0.2
1.1.1.1
IPC
NetFilter
Pod 网络
etcd
keepalived VIP
Flannel{\"Backend\":{\"Type\":\"udp\"}}
PODN
ClusterIP
过滤
Mount
DOCKER_HOST
6
监听末分配节点的Pod及Node等等信息
Images
veth2t7d3js8
removeudp header
flannel的三种模式https://www.cnblogs.com/chenqionghe/p/11718365.htmlflannel upd模式Tun设备详解https://zhuanlan.zhihu.com/p/140711132cisco 网络模拟 https://zhuanlan.zhihu.com/p/181697001
Client
LBaaS
node2
LB
10.100.0.0/24
转发到Proxy的随机端口
Registry
User 3.6
KernelSpace
Etcd cluster
c4
10.165.0.2:80
OS-Kernel
Master node(master)
access(nat模型转发)
k8s
Ipvs
Ipvs适用大规模集群
K8s Master
返回spec.nodename为空的pod
ipv6
Hypervisor
Upstream
nginxkeepalived(backup)
yum install bridge-utilsbrctl showip link showdocker0 桥默认就是一个SNAT桥 iptables -t nat -vnL
Control group(Cgroup)
ETCD
Nginx-Ingress
对外网络
docker0
CNI容器网络接口
创建Pod
HostPort(80/443)
lo
Io/inode
ETCD-1
Nginx直接共享Node的网络空间NginxTraefikEnvoy
10.165.0.2:98231
HardWare
PID
k8s网络通信-网络插件
CRI (容器运行接口)
ClusterIP -> PodIP
flannel0
消费
UTS
服务
Host OS
192.168.1.2/24
CLient -> NodeIP:NodePort -> ClusterIP:ServicePort -> PodIO:ContainerPort如果是https太复杂,四层不支持
100.96.1.1/24
开启随机端口
server1server2server3
10.98.2.79:80 -> 10.165.0.2:80 | 10.165.0.3:80
User 3.6
App A
CRI容器运行时接口
192.168.2.2/24
api-server
c2
Service网络 对内 对外
Master node(backup)
Kube-Proxy userspace 穿透kube-proxy 用户空间和内核空间频繁切换 iptables ipvs
Flannel{\"Backend\":{\"Type\":\"vxlan\"}}
NetWork
docker run
k8s的四层网络 0 节点网络 1 Pod网络 2 Service网络 3 外部接入网络节点内的Pod网络 - 依赖于虚拟网桥/网卡(LInux虚拟设备) - Pod内容器共享网络栈(pause容器创建)不同节点的Pod网络 - 路由方案:依赖底层网络设备,性能开销小 - 覆盖网络:不依赖底层网络路由设备,开销大
NameSpace
ARP
跨节点的Pod 通信
ingress
同步转发规则
nginxkeepalived(master)
Iptables适用中小集群
HaProxykeepalived(backup)
KubeLet
Pod2
K8s Cluster
服务注册
eth0
POD 网络
App F
ServiceName -> ClusterIP
CLient -> NodeIP:NodePort -> ClusterIP:ServicePort -> PodIO:ContainerPort
Pod4
10.98.2.79:80 -> 10.165.0.2:80 | 10.165.0.3:80
Master
1. Frame:2. Ethernet II3. IP: src: 100.96.1.2 dst: 100.96.1.34. UDP: sport:8285 dport:82855. Ethernet II6. IP: src:span style=\
Pod1
Containers
APIServer
iptables
1. Frame:2. Ethernet II3. IP: src: 1.1.1.1 dst: 3.3.3.34. UDP: sport:4789 dport:47895. vxlan(VNI)6. Ethernet II7. IP: src:span style=\
App E
末有合适节点
veth1b7d8fs5
UDPEncapsulation
❤心跳
OCI (开放容器协议)启动Pod
App D
flannel.1font color=\"#323232\
HaProxykeepalived(master)
Pod3
0 条评论
下一页
为你推荐
查看更多