问题标签 [project-calico]

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 回答
40 浏览

kubernetes - Calico 从所有节点通告所有 Kubernetes 节点子网

节点图

我正在运行 Calico Node2Node Mesh。并成功设置与我的上游交换机的对等互连。

看起来很奇怪,似乎每个节点都在宣传所有节点网络。我认为每个节点都应该宣传其 /26 范围和服务范围。相反,它会通告所有 4 /26(节点特定子网)和服务范围。我担心这有一些多路径问题。

这是预期的行为吗?

172.16。路由是特定于节点的 172.20。是 kube clusterip 服务的地方

印花布 BGP 清单

0 投票
1 回答
1006 浏览

kubernetes - Kubernetes Service 不转发到 80 和 443 以外的端口

集群设置:

  • 操作系统:Ubuntu 18.04,带有 Kubernetes 推荐的安装设置
  • 使用 Kubespray 引导集群
  • CNI 是印花布

速览(当 redis 服务 ip 为 时10.233.90.37):

  • 主机:psql 10.233.90.37:6379=> 成功
  • 主机:psql 10.233.90.37:80=> 成功

  • Pod(在任何命名空间中)psql 10.233.90.37:6379=> 超时

  • Pod(在任何命名空间中)psql redis:6379=> 超时
  • Pod(在任何命名空间中)psql redis.namespace.svc.cluster.local=> 超时
  • Pod(在任何命名空间中)psql redis:80=> 成功
  • Pod(在任何命名空间中)psql redis.namespace.svc.cluster.local:80=> 成功

Kubernetes 服务(NodePort、LoadBalancer、ClusterIP)不会为 pod 转发 80 和 443 以外的端口。Pod 端口可以不同,但​​如果 Service 端口不是 80 或 443,则对 Service 的请求会超时。

从主机到 Kubernetes 服务的请求在 80 和 443 以外的端口上工作。但是从 pod 到这些其他端口的请求失败。

从 pod 到端口 80 和 443 上的服务的请求确实有效。

示例服务:

这种疯狂的 Kubernetes 服务端口行为是怎么回事!?

调试后发现可能与 ufw 和 iptables config 有关。

ufw 设置(非常宽松):

Kubespray 部署失败,并禁用了 ufw。Kubespray 部署成功并启用了 ufw。

部署后,禁用 ufw 将允许 pod 连接到 80、443 以外的端口。但是,禁用 ufw 时集群会崩溃。

知道发生了什么吗?我是否缺少 ufw 配置中的端口....?kubespray 安装成功需要 ufw 似乎很奇怪。

0 投票
2 回答
2719 浏览

kubernetes - 不正确的 cni 安装阻止 coredns pod 启动

刚刚使用 kubeadm v1.15.0 安装了一个主集群。但是,coredns 似乎陷入了挂起模式:

以下是 pod 显示的内容:

我删除了主节点上的污点,但无济于事。我不应该能够创建一个没有任何问题的单节点主节点吗?我知道如果不去除污点,就不可能在主节点上调度 pod,但这很奇怪。

我尝试添加最新的印花布 cni,也无济于事。

我得到以下正在运行的 journalctl(systemctl 没有显示错误):

确实,当我查看时,/etc/cni/net.d那里什么都没有->是的,我跑了kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/calico.yaml……这是我应用此命令时的输出:

我在 calico-node 的 pod 上运行了以下命令,该 pod 处于以下状态:

我试过法兰绒作为cni,但情况更糟。由于污染,kube-proxy 甚至无法启动!

编辑附录

kube-controller-manager和不应该kube-scheduler有定义的端点吗?

最后,为了理智,我尝试了 v1.13.1,瞧!成功:

编辑 2

尝试sudo kubeadm upgrade plan并在 api-server 的运行状况和错误证书上出现错误。

在 api-server 上运行这个:

kubectl logs kube-apiserver-thalia0.x.x.edu --namespace=kube-system1

并得到了大量此类错误,这些错误TLS handshake error from 10.x.x.157:52384: remote error: tls: bad certificate来自早已从集群中删除的节点,并且在kubeadm resets主节点上的几个节点之后,以及 kubelet、kubeadm 等的卸载/重新安装。

为什么会出现这些旧节点?证书不会在 a 上重新创建kubeadm init吗?

0 投票
1 回答
812 浏览

kubernetes - 在 IPV6 上安装 Kubernetes

我正在尝试在 IPV6 环境中安装 Kubernetes 1.14.3。

我在这个环境中没有任何 IPV4 接口,只有 IPV6。

我尝试使用 p-lain kubeadm 配置文件,它似乎可以工作,但是当我尝试应用 calico cni 时,calico-node 一直失败。

这是目前 pod 的状态:

我猜想 codedns 和控制器只会在 calico-node 运行后启动,但它会因我之前粘贴的错误而一直失败。

在 kubeadm 配置文件中,我在代理配置中选择了 ipvs。

有人知道如何解决这个问题吗?谢谢

新状态:我能够解决 calico-node 问题,但现在我在 calico-controller 上失败了:

0 投票
1 回答
8042 浏览

kubernetes - Kubernetes NetworkPlugin cni 设置 pod 失败

关于我使用的以下描述 pod 的日志,我的 pod 由于“FailedCreatePodSandBox”而陷入挂起状态</p>

有一些关键说明:-我使用印花布作为 CNI。- 这个日志重复多次,我只是把这个作为样本过去。- ip 192.168.90.152 属于入口,129 属于 k8s 的监控 NS 中的分蘖,我不知道为什么 k8s 会尝试将其绑定到另一个 pod。

我用谷歌搜索了这个问题,我在这里什么也没有。

有人可以帮助解决这个问题吗?

0 投票
0 回答
240 浏览

kubernetes - Kubernetes 绑定地址

我之前在开发环境中设置了 kubernetes 集群,使用私有服务器没有任何问题。现在我在数据中心(hetzner)中创建了一个新集群,我已经尝试让一切正常工作了好几天,多次重新安装服务器,每次都面临同样的问题。我的大部分服务似乎都有网络问题,例如仪表板、dockerreg ui、...无法访问 Web 界面加载的资源。甚至将容器推送到私有 dockerreg 启动但几秒钟后停止并超时。如果我将任何服务配置到它们工作的节点端口有问题。

所以这可能是 kube-proxy 的问题。我所有的服务器(3 个主节点和 2 个工作节点)都有一个公共和私有 IP 地址。当我得到一个 pod 列表时,所有在主机 ip 上运行的那些,使用外部 ip 而不是内部 ip。

我如何绑定这些以仅使用内部 ip?

kubectl get pods -o wide -n kube-system

我正在使用 CRIO 和 calico 运行 kubernetes 1.15.3。所有服务器都在 10.0.0.0/24 子网上

我希望在节点 ip 上运行的 pod 使用内部 ip 而不是外部 ip

--- 编辑 16/09/2019

使用以下命令初始化集群 sudo kubeadm init --config=kubeadm-config.yaml --upload-certs My kubeadm-config.yaml

0 投票
1 回答
2278 浏览

kubernetes - Calico CNI pod 网络无法跨 EKS Kubernetes 工作节点上的不同主机工作

我正在运行版本 1.12 的 vanilla EKS Kubernetes。

我使用 CNI Genie 允许自定义选择 pod 在启动时使用的 CNI,并且我已经安装了标准 Calico CNI 设置。

使用 CNI Genie,我将默认 CNI 配置为 AWS CNI (aws-node),所有 pod 都照常启动并从我的 VPC 子网中分配一个 IP。

然后,我有选择地使用 calico 作为我正在测试的一些基本 pod 的 CNI。我正在使用默认的 calico 192.168.0.0/16 CIDR 范围。如果 pod 在同一个 EKS 工作节点上,一切都会很好。

Core DNS 也运行良好(只要我保持 coredns pod 在 aws CNI 上运行)。

但是,如果一个 pod 移动到不同的工作节点,那么它们之间的网络在集群内部就不起作用。

我检查了 calico 自动配置的工作节点上的路由表,这对我来说似乎是合乎逻辑的。

这是我在所有命名空间中的广泛 pod 列表:

如您所见,两个hello-node pod 正在使用Calico CNI。

我用两个服务暴露了 hello-node pod:

我已经确认如果我使用 aws CNI 启动 hello-node pod,当它们使用集群服务名称在单独的主机上运行时,我可以在它们之间 ping / curl。

当我如上所述使用 Calico CNI 时,事情就停止了。

我在这个测试集群中只有两个 EKS 工作主机。这是每个的路由:

K8s Worker 1 条路线

K8s Worker 2 条路线

对我来说,路线: 192.168.25.192/26 via 10.0.3.222 dev tunl0 proto bird onlink

告诉我来自该工作程序(及其容器/pod)的发往 192.168.25.192/16 子网的流量应该在 tunl0 接口上发送到 10.0.3.222(EC2 主机的 AWS VPC ENI)。

此路由位于 EC2 主机上10.0.2.31。因此,换句话说,当从该主机的容器与 calico 子网 192.168.25.192/16 上的容器通信时,网络流量应路由到 10.0.3.222(我的另一个 EKS 工作节点的 ENI IP,使用 Calico 的容器在该子网上运行)。

澄清我的测试程序:

  1. hello-node1 pod 中执行,并且curl http://hello-node2:8082(或 ping hello-node2 pod 的 calico 分配的 IP 地址。

编辑

为了进一步测试这一点,我在运行hello-node2 pod 的主机上运行 tcpdump,在端口 8080 上捕获(容器侦听此端口)。

我确实在我正在运行的测试容器运行的目标主机上获得了活动,但它似乎并不表示流量下降。

甚至当我从另一个主机上的另一个 pod 运行 curl 时,运行我的目标/测试 pod 的主机上的calia0da7d91dc2接口也会显示增加的 RX 数据包和字节数。流量肯定是穿越的。

是什么阻止了网络在此处的主机之间工作?我错过了一些明显的东西吗?

编辑 2 - Arjun Pandey-parjun8840 的信息

以下是有关我的 Calico 配置的更多信息:

  • 我已禁用所有 AWS EC2 工作节点上的源/目标检查
  • 我已按照最新的 calico 文档配置 IP 池以用于跨子网和 NAT 用于集群外的流量

calicoctl configs注意:似乎工作负载端点不存在...

以下是集群中的示例主机和测试容器的容器网络之一的一些网络信息:

主持人ip a

nsenter 在测试容器 pid 上获取ip a信息:

0 投票
0 回答
123 浏览

kubernetes - Canal CNI中cali*(veth)与flannel.1(vxlan)的关系

我使用 Canal 作为 Kubernetes 集群的 CNI。在工作节点中,使用ip addr我可以看到 veth 接口,如cali*. 我知道这个接口将与flannel.1

在 docker 的情况下,我可以很容易地发现 veth 绑定到 docker0 接口

那么我怎样才能找到任何Linux命令之间的关系,cali*比如flannel.1ip

0 投票
1 回答
76 浏览

vagrant - 哪个扩展版本允许我在 vagrant/virtualbox 环境中创建 calico daemonset

我正在尝试使用 calico 作为网络框架来部署 vagrant/virtualbox 环境。然而,当做

我收到以下错误:

以前,我试过v1and v1beta1,但得到了同样的错误信息。谁能告诉我哪个存储库版本带有 daemonset ?

0 投票
1 回答
91 浏览

amazon-eks - EKS GlobalNetworkPolicies default-deny with pod exceptions

目前我有一个 GlobalNetworkPolicy 'default-deny' 来限制我的集群中的所有流量,所有入口/出口都设置为拒绝所有()。

我尝试使用“订单”允许某些标签 pod 出现例外情况。当我没有指定“动作”参数以允许所有通信时,该策略有效。虽然如下当我在允许中指定参数时,Pod 不允许出口流量。

此策略配置正确吗?