- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在阅读 Kubernetes "Getting Started from Scratch" Guide并到达了可怕的Network Section ,他们说:
Kubernetes imposes the following fundamental requirements on any networking implementation
(barring any intentional network segmentation policies):
* all containers can communicate with all other containers without NAT
* all nodes can communicate with all containers (and vice-versa) without NAT
* the IP that a container sees itself as is the same IP that others see it as
我的第一个困惑来源是:这与“标准”Docker 模型有何不同?Docker 有何不同 w.r.t.这 3 个 Kubernetes 要求?
文章接着总结了 GCE 如何实现这些要求:
For the Google Compute Engine cluster configuration scripts, we use advanced routing to assign each VM a subnet (default is /24 - 254 IPs). Any traffic bound for that subnet will be routed directly to the VM by the GCE network fabric. This is in addition to the "main" IP address assigned to the VM, which is NAT'ed for outbound internet access. A linux bridge (called cbr0) is configured to exist on that subnet, and is passed to docker's --bridge flag.
我的问题是:本段针对以上 3 项中的哪些要求?更重要的是,它如何达到要求?我想我只是不明白 1-subnet-per-VM 如何实现:容器-容器通信、节点-容器通信和静态 IP。
而且,作为奖励/延伸问题:为什么 Marathon 没有遇到与 Kubernetes 在这里解决的相同的网络问题?
最佳答案
Docker 的标准 networking configuration从 chosen defaults 中为您挑选一个容器子网.只要它不与主机上的任何接口(interface)冲突,Docker 就可以接受。
然后,Docker 插入一个 iptables MASQUERADE 规则,允许容器使用主机的默认接口(interface)与外部世界对话。
Kubernetes 的 3 要求违反了以下事实:仅根据主机上使用的地址选择子网,这强制要求使用 MASQUERADE 规则对所有容器流量进行 NAT。
考虑以下 3 主机 Docker 设置(为了突出显示而做的有点刻意):
eth0:10.1.2.3
docker0:172.17.42.1/16
容器-A:172.17.42.2
eth0:10.1.2.4
docker0:172.17.42.1/16
容器-B:172.17.42.2
eth0:172.17.42.2
docker0:172.18.42.1
假设 container-B 想要访问 container-A 端口 80 上的 HTTP 服务。您可以让 docker 在 Host 1 的某处公开 container-A 的端口 80。然后 container-B 可能会向 10.1.2.3:43210 发出请求。这将在 container-A 的端口 80 上接收,但看起来像是来自 10.1.2.4 上的某个随机端口,因为 Host 2 .这违反了所有容器在没有 NAT 的情况下进行通信并且容器看到与其他容器相同的 IP 要求。尝试直接从 Host 2 访问 container-A 的服务,您的节点可以在不违反 NAT 的情况下与容器通信。
现在,如果这些容器中的任何一个想要与 Host 3 通信,它们就是 SOL(只是一个一般性的论点,要小心使用自动分配的 docker0 子网)。
GCE/AWS/Flannel/... 上的 Kubernetes 方法是 assign每个主机 VM 都是从平面专用网络中划分出来的子网。没有子网与 VM 地址或彼此重叠。这让容器和 VM 可以进行 NATless 通信。
关于networking - 为 Kubernetes 设置网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32852216/
我正在使用AWS中的VM设置Elasticsearch集群。 我知道每个节点都会自动尝试加入一个在同一网络中具有相同群集名称的现有群集。 但是,我无法理解“同一网络” 是什么。 为了了解同一网络,我发
我尝试部署一个已经存在于 Kovan 网络上的合约实例,以通过 web3 和 metamask 与其交互。 首先,我将 metamask 设置为我的当前提供者,然后我部署了一个合约实例,如下所示:
停止 docker 后,它拒绝重新启动。它提示另一个名为 docker0 的网桥已经存在: level=warning msg="devmapper: Base device already exis
我正在使用“docker network create --d bridge mynet”创建一个 docker 网络。我想获取与此 docker 网络关联的网桥名称。 我知道我可以使用“-o”来提供
我的一位同事的VPN连接有问题。似乎他的操作系统重设了代理设置,并且他需要手动将其更改回。有没有办法使用Powershell设置VPN和代理? 他正在使用Windows 7,因此可以使用Powersh
我在 Azure VM 中有一个虚拟机,我想获取网络输入/网络输出指标。 在 Azure 门户中,我将诊断设置和指标设置为存储到选定的存储表中。但存储的指标与我在 Azure 门户中看到的指标之间存在
我有一个用例,我的 Docker 容器的第二个接口(interface)需要共享主机的第二个网络接口(interface)的接口(interface)。这可能使用 docker network con
我在 Azure VM 中有一个虚拟机,我想获取网络输入/网络输出指标。 在 Azure 门户中,我将诊断设置和指标设置为存储到选定的存储表中。但存储的指标与我在 Azure 门户中看到的指标之间存在
我想了解一些关于 Docker 的事情: 如何找到我的容器所在的网络? 我可以动态分离我的容器并附加到其他网络吗?怎么样? 如果我有两个容器正在运行,如何检查这两个容器是否在同一个网络?我可以 pin
我已经开发了一款使用Reaction Native和世博会的应用程序,并想在它的末尾添加一个横幅广告。当我在Android模拟器上的开发版本上运行应用程序时,应用程序的其余部分在没有应用程序的情况下运
我已经编辑了 eth0,但我犯了一个错误,我的 VPS 现在处于脱机状态,甚至无法连接到 ssh,并在故障恢复控制台显示以下消息: “网络不可达”。 配置/编辑网络的命令是什么!? Photo 最佳答
今天早上我启动了我的 GCE 实例,并且 4/6 完全无法访问。所有这些都在同一个 us-east1-d 区域中。 SSH 连接也无法正常工作,因此我使用串行控制台连接到有问题的实例之一。 当我尝试
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 5年前关闭。 Improve this qu
我正在使用 Network.Browser 4000.0.9 检索网页: import Network.Browser import Network.HTTP main = do (uri
我正在尝试更新我在 docker 容器中的 apt 存储库,但我做不到。 docker run -it --dns 8.8.8.8 --dns 8.8.4.4 debian apt-get 更新 ..
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
Axios 是否可以区分以下内容: 由于客户端没有网络连接而失败的请求发出请求的时间 - (ERR_CONNECTION_REFUSED)。 由于网络连接丢失而失败的请求之后已发出请求,但在收到响应之
Unity 已升级其网络系统,并将旧网络称为遗留网络。 那么我们如何将 RPC 调用更改为新的 Unity Networking?这种方法的等价物是什么?我们应该为它编写自己的方法吗? (发送字节数组
在机器学习工具 vowpal wabbit ( https://github.com/JohnLangford/vowpal_wabbit/ ) 中,通常训练线性估计器 y*=wx。但是,可以添加前向
我正在尝试将 Boost 用于某些 IPv6 和多播网络通信。我需要构建一个使用特定网络接口(interface)索引的 IPv6 多播套接字。 我能够在 boost/asio/ip/detail/s
我是一名优秀的程序员,十分优秀!