pod内部网络实现
k8s主题系列:
一、k8s网络之设计与实现
二、k8s网络之pod内部网络
三、k8s网络之Flannel网络
四、k8s网络之Calico网络
pod特性
Pod 是 K8S 的最小工作单元。每个 Pod 包含一个或多个容器。K8S 管理的也是 Pod 而不是直接管理容器。Pod 中的容器会作为一个整体被 Master 调度到一个 Node 上运行。
Pod 的设计理念是支持多个容器在一个 Pod 中共享网络地址和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。

一个 Pod 中可以包含多个容器,而一个 Pod 只有一个 IP 地址。那么多个容器之间互相访问和访问外网是如何使用这一个 IP 地址呢?
答案是:多个容器共享同一个底层的网络命名空间 Net(网络设备、网络栈、端口等)。
共享网络探究
下面以一个小例子说明,创建一个 Pod 包含两个容器,yaml 文件如下:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: Pod-two-container
spec:
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: busybox
image: busybox
command:
- "/bin/sh"
- "-c"
- "while true;do echo hello;sleep 1;done"
- name: nginx
image: nginx

创建 1 个 Pod 中包含 2 个 Container,实际会创建 3 个 Container。多出的一个是“Pause”容器。
该 Container 是 Pod 的基础容器,为其他容器提供网络功能。

查看 Pause 容器的基础信息:

使用命令 docker inspect 容器 _ID 查看 Nginx 详细信息,其网络命令空间使用了 Pause 容器的命名空间,同样还有进程间通信的命名空间。

再查看 Busybox,可以发现其网络命令空间使用了 Pause 容器的命名空间,进程通信的命名空间也是 Pause 容器的命名空间。

实现方式:Nginx 和 Busybox 之所以能够和 Pause 的命名空间连通是因为 Docker 有一个特性:能够在创建时使用指定 Docker 的网络命名空间。
在 Docker 的官网上有一段描述:
https://docs.docker.com/engine/reference/run/

手动实现pod网络
所以如果要手动完成一个上面的 Pod,可以先创建 Pause,再创建 Nginx 和 Busybox,同时将网络指定为 Pause 的网络命名空间即可。
docker run --name pause mirrorgooglecontainers/pause-amd64:3.1
docker run --name=nginx --network=container:pause nginx
docker run --name=busybox --network=container:pause busybox
上述步骤由 K8S 帮助我们完成,所以 Pod 命名空间应该是这样的:

pod内部网络实现的更多相关文章
- 设置Windows的TCP/IP属性和内部网络号码
这里,以Windows XP和Windows 7版本为例. 在安装了IPX/SPX协议或TCP/IP协议的Windows计算机上可以设置计算机的内部网络号码,主要可以防止进行局域网连接时出现冲突现象. ...
- 内部网络出口防火墙导致TCP类扫描异常
测试过程中确认,由于内部网络出口防火墙存在连接数等策略限制,会导致TCP类扫描出现异常,表现为大量误报. Nessus.nmap.synscan均存在此现象.
- 反向代理:是指以代理server来接收Internet上的请求,然后将请求转发到内部网络的server上,并将结果返回给Internet上连接的client,此时的代理server对外就表现为反向代理server。
Nginx安装好之后.開始使用它来简单实现反向代理与负载均衡的功能.在这之前.首先得脑补一下什么是反向代理和负载均衡. 反向代理:是指以代理server来接收Internet上的请求,然后将 ...
- Hyper-V虚拟机配置内部网络固定IP 并且连接外网
2019/10/23 Hyper-V CentOS7 摘要:Hyper-V中的虚拟机CentOS7能固定IP并且连接外网 保证宿主机的Xshell始终只用同一个IP连接到该虚拟机 新建内部网络虚拟交换 ...
- TTL 传输中过期,内部网络环路
ping目标地址的时候,如果不是显示超时,而是很快出现TTL 传输中过期,很可能情况是内部网络出现环路 tracert一下目标地址,如果路由不断重复,说明是环路
- Kubernetes隔离pod的网络
本章介绍如何通过限制pod可以与其他哪些pod通信,来确保pod之间的网络安全. 是否可以进行这些配置取决于集群中使用的容器网络插件.如果网络插件支持,可以通过NetworkPolicy资源配置网络隔 ...
- ios 模拟器内部网络连接问题
今日,一运行程序,打印出来头疼的的日志 "Error Domain=kCFErrorDomainCFNetwork Code=-1001 "The request timed ou ...
- TKE基于弹性网卡直连Pod的网络负载均衡
前言 Kubernetes在集群接入层设计并提供了两种原生资源Service和Ingress,分别负责四层和七层的网络接入层配置. 传统的做法是创建Ingress或LoadBalancer类型的Ser ...
- 深入redis内部---网络编程
Redis在anet.h和anet.c中封装了底层套接字实现: 1.anetTcpServer,建立网络套接字服务器,完成对socket(),bind(),listen()等操作的封装,返回socke ...
- Linux上用IP转发使内部网络连接互联网
IP转发的概念: 使 Linux 机器像路由器一样将数据从一个网络发送到另一个网络.所以,它能作为一个路由器或者代理服务器,实现将一个连接的互联网或者网络连接共享给多个客户端机器. 1. 启用 IPv ...
随机推荐
- linux开发基于iMX6ULL-uboot编译环境配置
1.下载半导体官方的uboot和linux内核固件 2.下载uboot 3.下载linux内核(选择5.4版本的分支下载) 下载后如下所示 解压后如下 查看文件夹中的内容 创建一个git仓库然后开始自 ...
- GPTs Hunter 是什么?
原文: https://openaigptguide.com/openai-gpts-hunter/ GPTs Hunter 是一个功能强大的免费导航网站,支持多语言,提供用户友好的界面. GPTs ...
- 查看API官方文档
盛年不重来,一日难再晨.及时宜自勉,岁月不待人. 学习一门语言, 了解其开发文档必不可少.开发文档就是我们在编程开发.维护.升级过程中的参考最全面.最权威的资料.我认为就是开发者为后人方便理解留下 ...
- springBoot + 工厂模式 实现 快递鸟、顺丰和快递100的物流查询
前言: 在Spring Boot中实现快递鸟.顺丰和快递100的物流查询功能通常需要与它们提供的API进行交互.当然使用他们的API 我们是需要申请和注册,从而去拿到 key 来进行调用.所以为注册的 ...
- 小满OKKICRM与金蝶云星空对接集成客户资料
小满OKKICRM与金蝶云星空对接集成客户列表查询(更新列表)&客户新增(小满客户对接金蝶客户-P) 数据源平台:小满OKKICRM 小满科技成立于2013年,是阿里巴巴集团战略投资的高新技术 ...
- win32 API 文件夹操作函数整理
常用操作文件目录的函数 1. CreateDirectory 创建文件夹 原型: BOOL CreateDirectory( LPCTSTR lpPathName, LPSECURITY_ATTRIB ...
- serdes IP集成使用常见踩坑问题
1.不支持小数分频,或者小数分频后频偏过大部分速率配置无法使用. 2.CDR 不稳定,经常无法锁定,或者温变时出现失锁情况,以及cdr lock信号无法准备上报状态. 3.CORE内部多个lane之间 ...
- Oracle数据库卸载器 - 开源研究系列文章
今天无事,把网上搜到的Oracle数据库卸载器的软件更新到C#的Winform界面的操作上. 1. 程序目录: 与笔者的其它软件类似,目录如下: 2. 使用的类: 这里主要使用了一个处理函数: 3. ...
- LeetCode132:分割回文串(DP、回文)
解题思路:有两个问点:1.如何快速当前字符串哪些的字串是回文:2.如何组合这些字串达到分割次数最少 针对问点1,可以开辟一个二维布尔数组 a[][],a[i][j]表示以索引i为起点,j为结束位置的字 ...
- django-celery-beat插件使用
该插件从 Django 管理界面管理celery的定期任务,您可以在其中动态****创建.编辑和删除定期任务以及它们的运行频率. django-celery-beat提供了几种添加定时或周期性任务的方 ...