问题标签 [cni]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2017 浏览

kubernetes - 为什么node使用flannel加入kubernetes集群时没有创建CNI0桥?

使用 flannel 作为 CNI 插件在 Centos 7 上设置新的 k8s 集群。将工作程序加入集群时,不会创建 CNI0 网桥。

环境是kubernetes 13.2.1,Docker-CE 18.09,Flannel 010。Centos 7.4。我的理解是,当法兰绒调用时,CNI0 是由 brctl 创建的。通过 docker debug 可以看到 install-cni-kube-flannel 容器被实例化了。在查看 /var/lib 时,我没有看到 /var/lib/cni 目录已创建。

我希望 CNI0 和 /var/lib/cni 目录将由 install-cni-kube-flannel 容器创建。我将如何进一步解决这个问题?CNI 接口是否有日志功能?

0 投票
0 回答
613 浏览

kubernetes - IPv6模式下的cilium配置

我在直接路由模式下在 Kubernetes 1.12 中使用 cilium。它在 IPv4 模式下工作正常。我们使用 cilium/cilium:no-routes image 和 cloudnativelabs/kube-router 通过 BGP 通告路由。

现在我想在仅 IPv6 的 Kubernetes 集群中配置相同的配置。但是我发现 kube-router pod 崩溃了,并且没有为 --pod-network-cidr 创建路由条目。

以下是实验室详细信息 -

  • 主节点:IPv6 私有 IP -fd0c:6493:12bf:2942::ac18:1164
  • 工作节点:IPv6私有IP -fd0c:6493:12bf:2942::ac18:1165
  • 两个节点的公共 IP 都是 IPv4,因为我没有 IPv6 公共 IP。

仅 IPv6 的 K8s 集群创建为

掌握:

工人:

主节点尚未准备好,因为 cni 尚未配置并且 codedns pod 尚未启动。

现在在 IPv6 中安装 cilium。

1.在主节点运行 etcd。

这里 [fd0c:6493:12bf:2942::ac18:1164] 是主节点 ipv6 ip。

2. sudo mount bpffs /sys/fs/bpf -t bpf

3.运行 kuberouter。

预期结果:

Kube-router 添加对应于集群中其他每个节点的 POD-CIDR 的路由条目。节点公共 IP 将设置为 GW。对于 IPv4,获得以下结果。对于 IPv4,在节点 1 中为节点 2(公共 IP 10.40.139.196 和 POD CIDR 10.244.1.0/24)创建路由条目。Device是绑定公网IP的接口。

注意:仅适用于 IPv6 Kubernetes,--pod-network-cidr=2001:2::/64

实际结果 -

问题-

kuberouter 可以使用 Kubernetes 集群使用的私有 IPv6 地址,而不是使用在我们的例子中是enter code hereIPv4 的公共 IP。

0 投票
2 回答
2089 浏览

kubernetes - Flannel 接口不在 kubernetes 工作节点上创建

我有来自不同网络的多个 kvm 节点。所有这些节点都有两个 iface eth0: 10.0.2.15/24eth1: 10.201.(14|12|11).0/24并且 dc 之间的手动路由很少。

所有节点的描述

主节点(k8s-hv06)

Flannel v0.10.0 与 rbac 和附加参数 --iface=eth1 一起使用。一个或多个主节点工作正常。

但我无法将任何工作节点添加到集群中。比如我已经用docker-ce、kubeadm、kubelet明确安装了Ubuntu 18.04

我正在尝试将工作节点(k8s-hv09)添加到集群

cni0并且flannel.1没有创建并且无法建立与主节点的连接。

我看到命令/opt/bin/flanneld --iface=eth1 --ip-masq --kube-subnet-mgr在工作节点上运行,但在容器 k8s_install-cni_kube-flannel-ds-amd64 停止后终止。文件/etc/cni/net.d/10-flannel.conflist和目录/opt/cni/bin是存在的。

我不明白原因。如果我将新的主节点添加到集群中,它将正常工作。

但不是工作节点。

更新:

我与 api 服务器的连接没有问题。我的问题是两个 iface( cni, flannel)。如果没有这些 ifaces,我就没有主节点和工作节点之间的同步。好的,让我们再添加一个节点并将其添加到集群中。如果我使用kubeadm-init我的配置文件,一切都会正常工作。法兰绒插件的Ifaces是礼物。让kubeadm reset** 和kubeadm join这个节点到同一个集群。没有网络接口。但为什么?在这两种情况下,我们都有相同的方式从主 api 获取网络配置数据。如果我发现任何错误或警告,我会有一个线索。

0 投票
1 回答
246 浏览

kubernetes - 似乎有些东西正在捕获到 pod 的 TCP 流量

我正在尝试使用 Kubeadm 使用 Calico (IPIP) 部署 Kubernetes。部署完成后,我正在使用这些清单部署 Calico

在应用它之前,我正在编辑 CALICO_IPV4POOL_CIDR 并将其设置为 10.250.0.0/17 以及使用 command kubeadm init --pod-cidr 10.250.0.0/17

几秒钟后,CoreDNS pod(例如获取地址 10.250.2.2)开始重新启动,错误为 10.250.2.2:8080 连接被拒绝。

现在有点挖掘:

从集群中的任何节点ping 10.250.2.2工作并到达 pod(pod net 命名空间中的 tcpdump 显示它)。

来自不同的 pod(在不同的节点上)curl 10.250.2.2:8080效果很好

从任何节点到curl 10.250.2.2:8080失败,连接被拒绝

因为它是 coredns pod,它在 53 上同时监听 udp 和 tcp,所以我从节点尝试了 netcat

nc 10.250.2.2 53- 连接被拒绝 nc -u 10.250.2.2 55- 有效

现在我已经为端口 8080 的源节点上的每个接口进行了 tcpdump,并且 curl 到 CoreDNS pod 甚至似乎都没有离开节点......所以 iptables?

我也试过编织、运河和法兰绒,似乎都有同样的问题。

我现在已经没有想法了......请指点?

0 投票
0 回答
929 浏览

docker - docker 和 podman iptables 规则是否冲突?

我已经在同一台机器上安装了 Docker 和 Podman。这是我的第一个问题吗?也许。但我的目标是两者都运行,无论如何我都想继续。

我的问题是:Docker 的规则和 Podman 的规则之间似乎存在 iptables 冲突,我的工作解决方案对我来说没有任何意义。

版本信息:操作系统:RHEL 7.6 Podman:0.11.1.1 Docker:18.09.1 Iptables:1.4.21

两点信息:

  1. docker 守护进程在启动时为容器网络添加 iptables 规则。
  2. Podman 在运行容器时通过 CNI(容器网络接口)为容器网络添加 iptables 规则。

我正在运行一个带有 podman 的容器,该容器公开了一个端口(例如,5000)。我构建了 3 个测试用例来帮助说明我的问题以及我在案例 3 中遇到的使远程访问起作用的极其奇怪的行为。继续阅读。

  1. 第一种情况完全有道理:我正常安装 Podman,没有安装任何 Docker,然后运行容器。噗!容器运行,我可以远程访问端口,正如我所料。

  2. 第二种情况是远程访问失败。我正常安装 Podman,安装并运行 Docker 服务,然后使用 Podman运行我的容器。繁荣。远程访问失败,因为没有到主机的路由。

在我继续第三种情况之前,重要的是要注意两个非常具体的 iptables 规则。您可以通过运行以下命令查看这些规则(如果您正在运行 Docker 守护程序并启动了 Podman 容器):

该命令的输出是:

现在是第三种情况:

  1. 所以我在 iptables 中闲逛,我知道足够危险。

我决定删除CNI-HOSTPORT-DNAT规则:

突然间,我又可以通过 5000 端口远程访问容器了。

我的问题是:

为什么删除上述规则会使事情再次发生?您会认为删除 CNI 生成的规则会破坏 Podman 网络。但事实并非如此。我很困惑!

提前致谢。

更新:发现了问题,这是我的错。

在 DNAT 之后,我的数据包被正确发送到 FORWARD 链,但我在该链上有一个默认的 DROP,并且该链上没有规则接受绑定到端口 5000 的数据包。一旦我添加了一个 FORWARD 规则来接受 dport=5000 数据包,它开始工作了。

这个问题可以关闭。

0 投票
1 回答
628 浏览

docker - l2 cni插件与l3插件有什么区别?

l2 cni插件与l3 cni插件有什么区别?

L2 CNI 插件是否不提供对 Pod 的公共访问?L2 和 L3 插件的示例是什么

0 投票
0 回答
146 浏览

kubernetes - Kubernetes 集群 - 使用 L3 路由 - 无法通过网络 ping 豆荚

我正在使用“Learn Kubernetes the Hard Way”从头开始设置集群。我注意到跨节点的 pod 无法通信。实际上他们也无法访问互联网。

似乎cni0作为默认网关的接口没有正确路由数据包。

我没有使用任何网络驱动程序,例如calico基本flannel的 L3 路由。

这是我的设置:

2个具有外部ip的节点:

  1. 10.10.10.21-22
  2. POD CIDR -10.200.1-2.0/24
  3. CNI Bridge conf如下:

    /li>
  4. Kubelet 服务:

    /li>

每个节点的路由如下(取自一个节点):

从工作节点 - 我能够从另一个节点到达豆荚。只有在容器内,路由似乎不起作用。

来自 pod 的路由表:

请注意,这里的默认网关是 worker-2 的 10.200.2.1 - 这映射到cni0worker 2 的接口。

请协助

0 投票
1 回答
2966 浏览

kubernetes - Kubernetes postStart 生命周期钩子块 CNI

我的工作负载需要网络连接才能正常启动,我想使用postStart 生命周期挂钩,等待它准备好然后执行某些操作。然而,生命周期钩子似乎阻止了 CNI。永远不会为以下工作负载分配 IP:

这意味着我的工作量永远不会开始(尝试连接时挂起),并且我的生命周期钩环永远存在。有没有办法解决这个问题?

编辑:我使用边车而不是生命周期钩子来实现同样的事情 - 仍然不确定为什么生命周期钩子不起作用,执行 CNI 是容器创建 IMO 的一部分,所以我希望生命周期钩子在网络配置后触发

0 投票
1 回答
250 浏览

kubernetes - 如何确保在 EKS 上安排 Pod 之前对每个 Kubernetes 节点进行注释?

我正在尝试在 EKS 上使用 CNI 自定义网络来确保 Pod IP 是从备用子集分配的(以防止我的集群节点正在运行的子网中的 IP 匮乏)。为此,我需要创建一些 ENIConfigs 并注释每个节点。

如何确保在为每个节点安排任何 Pod 之前对其进行注释,以确保没有从我的节点运行的子网中分配 Pod IP?

编辑:到目前为止我能想到的唯一解决方案是:

  • 默认为所有节点添加 NoSchedule 污点
  • 部署一个可以容忍污点的自定义控制器
  • 让控制器根据需要注释所有节点并删除污点

但是,如果以上是托管服务需要大量工作的唯一解决方法

0 投票
1 回答
745 浏览

amazon-web-services - 加密 EKS 中的流量

我正在建立一个 EKS集群,AWS并且我想保护 Kuberentes 集群中的所有传输中的数据(以及 EKS 和外部系统之间的数据,但这超出了这里的范围)。

在 Kubernetes 中不同的 pods 之间使用了不同的协议,主要Rest/HTTP也是microservice-pods with a KafkaBroker和 JDBC 之间的通信microservice-pods and database pods(Zalando Postgres)之间filebeat-pod and elasticsearch,...

我看到了几个选项,但我不喜欢其中任何一个。

  • 单独加密每个通信-> 工作量太大。运营噩梦
  • Istio 或 LinkerD --> 仅适用于 Http 和 gRPC,不适用于 KafkaCommunication。重型控制平面。
  • 像 WeaveNet 这样的 CNI --> 不支持 SecurityGroups、FlowLogs、ACL

有更好的选择吗?你会推荐这些选项中的任何一个吗?