kubernetes pod infra container网络原理
刚开始接触kubernetes时,对kubelet的--pod-infra-container-image参数非常不能理解,不理解为什么我的业务应用需要依赖一个第三方的容器;
上文入门级kubernetes安装流程中简单提了一句,启动pod后的两个容器会有相同的网络地址,这样,多个容器可以绑定为一个pod进行管理;
本文展开来说一下这里的网络原理;其实就是一层窗户纸,捅破了就明白了;
在node上,看一下上文启动的两个container:
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3e5e69a69950 <registry>/nginx/nginx "nginx -g 'daemon of…" hours ago Up hours k8s_nginx_nginx-55cc995fdb-27t7z_default_1ca63ddd-7ab5-11e8-be61-3440b59f0098_0
ec311fee295d <registry>/rhel7/pod-infrastructure:latest "/pod" hours ago Up hours k8s_POD_nginx-55cc995fdb-27t7z_default_1ca63ddd-7ab5-11e8-be61-3440b59f0098_0
然后看一下它们的PID:
# docker inspect ec311fee295d|grep '\<Pid\>'
"Pid": ,
# docker inspect 3e5e69a69950|grep '\<Pid\>'
"Pid": ,
再看一下这两个进程的network namespace:
# ls -l /proc//ns/net
lrwxrwxrwx opss root 6月 : /proc//ns/net -> net:[]
# ls -l /proc//ns/net
lrwxrwxrwx root root 6月 : /proc//ns/net -> net:[]
这两个进程共用一个network namespace;但这个network namespace没有创建在/var/run/netns下,所以ip命令查看不了,做个软链好了:
# mkdir -p /var/run/netns
# ln -s /proc//ns/net /var/run/netns/pod1
# ip netns
pod1
这样就能查看这个network namespace下的网络信息了:
# ip netns exec pod1 ip addr
: lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN
link/loopback ::::: brd :::::
inet 127.0.0.1/ scope host lo
valid_lft forever preferred_lft forever
: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc noqueue state UP
link/ether ::ac:0a:3f: brd ff:ff:ff:ff:ff:ff
inet 172.10.63.2/ brd 172.10.63.255 scope global eth0
valid_lft forever preferred_lft forever
这就是在两个容器里看到的相同的网络信息;
现在也启动一个容器,用container网络模式加入到已有的network namespace;
# docker run -d --rm --net="container:ec311fee295d" xxxxxx
这样启动一个xxxxxx容器,加入到已有的网络,然后按同样的办法查看/proc/<pid>/ns/net,会发现这个容器使用的ns与前两个相同;进入容器查看网络信息,ip地址也与前两个相同;
kubernetes pod infra container网络原理的更多相关文章
- 《Kubernetes权威指南》——网络原理
1 Kubernetes网络模型 基本原则:每个Pod都拥有一个独立IP,而且假定所有Pod都在一个可以直接连通的.扁平的网络空间中. 基于基本原则,用户不需要额外考虑如何建立Pod之间的连接,也不需 ...
- 基于Kubernetes(k8s)网络方案演进
VIP PaaS在接近两年时间里,基于kubernetes主要经历四次网络方案的变迁: 1. kubernetes + flannel 2. 基于Docker libnetwork的网络定制 3. k ...
- Kubernetes pod网络解析
在Kubernetes中,会为每一个pod分配一个IP地址,pod内的所有容器都共享这个pod的network namespace,彼此之间使用localhost通信. 那么pod内所有容器间的网络是 ...
- Kubernetes(k8s)底层网络原理刨析
目录 1 典型的数据传输流程图 2 3种ip说明 3 Docker0网桥和flannel网络方案 4 Service和DNS 4.1 service 4.2 DNS 5 外部访问集群 5.1 外部访问 ...
- Kubernetes pod里一个特殊的容器:pause-amd64
大家在使用Docker容器或者Kubernetes时,遇到过这个容器么?gcr.io/google_containers/pause-amd64 docker ps的命令返回的结果: [root@k8 ...
- 039.集群网络-Pod和SVC网络实践
一 Pod和SVC网络 1.1 实践准备及原理 Docker实现了不同的网络模式,Kubernetes也以一种不同的方式来解决这些网络模式的挑战.本完整实验深入剖析Kubernetes在网络层是如何实 ...
- Kubernetes集群调度器原理剖析及思考
简述 云环境或者计算仓库级别(将整个数据中心当做单个计算池)的集群管理系统通常会定义出工作负载的规范,并使用调度器将工作负载放置到集群恰当的位置.好的调度器可以让集群的工作处理更高效,同时提高资源利用 ...
- 华为云对Kubernetes在Serverless Container产品落地中的实践经验
华为云容器实例服务,它基于 Kubernetes 打造,对最终用户直接提供 K8S 的 API.正如前面所说,它最大的优点是用户可以围绕 K8S 直接定义运行应用. 这里值得一提是,我们采用了全物理机 ...
- Kubernetes Pod详解
目录 基本概念 pod资源配额 容器的健康检查 静态pod 基本概念 Pod是kubernetes集群中最基本的资源对象.每个pod由一个或多个业务容器和一个根容器(Pause容器)组成.Kubern ...
随机推荐
- __x__(39)0909第五天__ 表格 table
表格 表示一种格式化的数据,如课程表,银行对账单... ... 在网页中,使用 table 创建一个表格. html代码: <!doctype html> <html> < ...
- File类中的一些属性 添加删除文件夹
import java.io.File; import java.io.IOException; public class FileD { public static void main(String ...
- virtualenvwrapper虚拟环境
之前学习过python的虚拟环境virtualenv,而virtualenvwrapper这个软件包可以让我们管理虚拟环境变得更加简单,不用再跑到某个目录下通过virtualenv来创建虚拟环境,并且 ...
- c#中string的一些基本用法
.string的Split方法的使用 这个例子就是通过制定的符号来将词组分开,Splite(分割的字符,分割的份数) using System; using System.Collections; p ...
- python中的基础2
2 2.1 字符串的索引与切片: a = 'ABCDEFGHIJK' print(a[0]) print(a[3]) print(a[5]) print(a[7]) 2.2 字符串的常用方法. pr ...
- iOS UIView 选择性倒角
有些APP中会有卡券,卡券做成了选择性倒角,例如左上,右上倒角.非常美观.看一下iOS的实现: #import "Masonry.h" @interface WJWDaojiaoV ...
- day28:hashlib
1,继续上一小节,讲解双下内置方法,双下getitem,setitem,delitem方法,是对象可以像字典一样的来访问属性 # 普通的字典是像下面这样操作的 dic = {'k' : 'v'} di ...
- 一种JNI混淆方案
转载自:http://www.liuling123.com/2016/06/so_method_mix.html 感谢原作者 侵删 默认情况下,使用JNI时与native对应的JNI函数名都是Java ...
- 周末没事干就看CSS JS Python ThinkPHP的书,照着例子运行就行,可以增强信心(www.delphihtmlcomponents.com 是神器,也可以帮助我学习。还有虚拟机运行Web)
https://www.javatpoint.com/javascript-tutorialhttps://www.javatpoint.com/html-tutorialhttps://www.ja ...
- 多线程之Synchronized锁的基本介绍
基本介绍 synchronized是Java实现同步的一种机制,它属于Java中关键字,是一种jvm级别的锁.synchronized锁的创建和释放是此关键字控制的代码的开始和结束位置,锁是有jvm控 ...