问题标签 [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 回答
483 浏览

kubernetes - 主节点上的 Kubernetes Canal CNI 错误

我正在为客户设置 Kubernetes 集群。

我之前已经多次完成这个过程,包括处理 vagrant 的细节,我已经能够不断地让 K8s 集群启动并运行而不会大惊小怪。

现在,在这个客户身上,我也在做同样的事情,但我在设置时发现了很多问题,这完全出乎意料。与我设置 Kubernetes 的其他地方相比,我看到的唯一明显区别是我有一个代理服务器,我必须经常与之抗争。没有什么NO_PROXY是环境无法处理的。

我面临的主要问题是建立运河(Calico + Flannel)。出于某种原因,在 Masters 2 和 3 上它不会开始。

寻找具体的错误,我发现问题出在kube-flannel容器上,它抛出了一个错误:

我只是不明白为什么。

一些相关信息:

  • 我的 clusterCIDR 和 podCIDR 是:192.168.151.0/25 (我知道,这很奇怪,除非是大问题,否则不要问)
  • 我已经在 systemd 上设置了 etcd
  • 我已经修改了 kube-controller-manager.yaml 以将掩码大小更改为 25(否则前面提到的 IP 将不起作用)。

我正在使用 Kubeadm 安装所有东西。我注意到的一件奇怪的事情是,在查看 config ( kubeadm config view) 时,我在 kubeadm config.yaml(for kubeadm init) 上设置的大部分信息都没有出现在配置视图中,包括 etcd 证书的路径。我也不确定为什么会发生这种情况,但我已经(希望)通过编辑 kubeadm 配置映射 ( kubectl edit cm kubeadm-config -n kube-system) 并保存它来修复它。

运河仍然没有运气。

谁能帮我找出问题所在?我已经记录了我所做的配置的几乎每一步,所以如果需要我可以提供它。

编辑:

我想同时我的 master2 和 3 确实没有关联的 podCIDR。为什么会发生这种情况?我该如何添加它?

0 投票
1 回答
266 浏览

kubernetes - k8s DaemonSet:被拒绝的 Pod 重新创建太快而无法获取任何日志或事件

我遇到了与此处所述完全相同的问题:https ://github.com/kubernetes/kubernetes/issues/51884

calico节点被创建但又被直接删除:

你能告诉我如何解决这个问题吗?journalctl 不会打印出 pod 失败的原因。甚至没有创建 pod,也可以看到日志。

0 投票
2 回答
1185 浏览

kubernetes - kubernetes HA 集群主节点未准备好

我已经使用下一个 config.yaml 部署了一个 kubernetes HA 集群:

当我检查时kubectl get nodes

如果我检查 pod,我可以看到太多失败了:

如果我运行kubectl describe node master2

然后,如果我检查吊舱,则kubectl describe pod -n kube-system calico-etcd-5jftb

我尝试将 etcd 集群更新到 3.3 版,现在我可以看到下一个日志(以及更多超时):

我检查过:kubectl get events

0 投票
4 回答
3909 浏览

kubernetes - 使用 NetworkPolicy 将“kube-system”命名空间列入白名单

我有一个多租户集群,其中多租户是通过命名空间实现的。每个租户都有自己的命名空间。一个租户的 Pod 不能与其他租户的 Pod 通信。但是,每个租户中的一些 pod 必须使用 Ingress 向 Internet 公开服务。

这我走了多远(我正在使用 Calico):

为每个命名空间 ( tenant1, tenant2, ... ) 部署,这限制了其命名空间内 pod 之间的通信。但是,这会阻止kube-system命名空间中的 pod 与此命名空间中的 pod 通信。

但是,kube-system默认情况下,命名空间没有任何标签,因此我不能专门将该命名空间列入白名单。

我通过手动给它一个标签找到了一个(肮脏的)解决方法:

并将白名单规则添加到网络策略中:

有没有更好的解决方案,无需手动给出kube-system标签?

编辑:我尝试另外添加一个“OR”规则,以专门允许来自具有标签“app=nginx-ingress”的 pod 的通信,但没有运气:

0 投票
0 回答
711 浏览

kubernetes - 如何在 Kubernetes 的 cluster-cidr 中设置不同的(从默认值)掩码?

我使用 Kubespray 部署工具(启用了 kubeadm 实验功能标志)部署了一个 Kubernetes 1.10.4 集群(3 个 Master,2 个 Workers)。

顺便说一句,我将 Canal 用作“kube_network_plugin”。

我的客户有一些网络限制。他们提供了以下网络空间:

  • 192.168.150.0/25
  • 192.168.150.128/25
  • 192.168.151.0/25

关于 kubespray 'k8s-cluster.yml',我已经更改了默认参数,默认为:

  • kube_service_addresses:10.233.0.0/18
  • kube_pods_subnet:10.233.64.0/18
  • kube_network_node_prefix:24

我们尝试更改这些参数以匹配客户提供给我们的网络空间,但不幸的是,此修改没有按预期工作。我们很快意识到使用 /25 掩码无法按预期工作,因此我们尝试从 /25 到 /20 使用,但没有任何效果。

我尝试使用 192.168.150.0/18 或 172.18.0.0/18 并且一切顺利(只要我们使用 /18 掩码),如下所示。

当使用不同于 /18 的掩码时,集群呈现的行为有点奇怪,因为例如 kube-dns pod、kube-proxy pod、kube-autoscaler 等,根本不会起床或 canal-pods部署在一个节点中,但在其他集群节点中却没有。

Kubernetes 是否有任何限制/约束不支持与 /18 不同的任何网络,或者我做错了什么?

我在网上搜索过这个,但在我读到的所有内容中都没有明确说明这一点。有人说(https://docs.projectcalico.org/v3.1/reference/calicoctl/resources/ippool)可以设置与默认值(/16)不同的掩码,但事实是如果我们改变它,它不起作用。

你能帮我解决这个问题吗?

此致,

佩德罗·克拉沃·洛佩斯。

0 投票
2 回答
3800 浏览

kubernetes - 记录 Kubernetes Calico NetworkPolicy?

我是 KubernetesNetworkPolicy和网络插件的新手calico

calico我已经在我的 Kubernetes 集群中成功实现了:

我还配置了相关的网络策略,它们工作得很好。

我唯一关心的是日志记录。我找不到任何可以告诉我某个请求是被接受还是被阻止的日志。

我试过检查calico-nodes-*pod 的日志,但它们没有提供任何合理的日志。

还有其他我可以查看的日志吗?

0 投票
1 回答
373 浏览

kubernetes - 如何使用 Calico 编写一个最小的 NetworkPolicy 来为具有 LoadBalancer 类型的服务的 Kubernetes 应用程序提供防火墙?

我有一个运行 Calico 作为覆盖和 NetworkPolicy 实现的 Kubernetes 集群,为 IP-in-IP 封装配置,我正在尝试使用以下服务公开一个简单的 nginx 应用程序:

我正在尝试编写一个仅允许通过负载均衡器进行连接的 NetworkPolicy。在没有覆盖的集群上,这可以通过允许来自用于将 IP 分配给工作程序实例本身的 CIDR 的连接来实现 - 这允许连接在特定工作程序上访问服务的 NodePort 并转发到后面的容器之一通过 IPTables 规则服务。但是,当使用配置为 IP-in-IP 的 Calico 时,通过 NodePort 建立的连接使用 Calico 的 IP-in-IP 隧道 IP 地址作为跨节点通信的源地址,如此ipv4IPIPTunnelAddr处 Calico Node 对象上的字段所示(I通过观察通过负载均衡器连接到 nginx 应用程序的源 IP 来推断这一点)。因此,我的 NetworkPolicy 需要允许这样的连接。

我的问题是如何在不ipv4IPIPTunnelAddr事先知道值且不允许来自集群中所有 Pod 的连接的情况下允许这些类型的连接(因为这些ipv4IPIPTunnelAddr值是从集群的 Pod CIDR 范围中提取的)。如果工作实例出现并死亡,这些 IP 的列表肯定会发生变化,我不希望我的 NetworkPolicy 规则依赖于它们。

  • 印花布版本:3.1.1
  • Kubernetes 版本:1.9.7
  • 等版本:3.2.17
  • 云提供商:AWS
0 投票
1 回答
789 浏览

kubernetes - 将节点端口添加到令人兴奋的 istio 服务

我使用 VM(ubuntu 16.04)创建了一个本地 kubernetes 集群,其中有一个 master 和 2 个 worker 我也使用 calico 进行网络,我目前正在探索 istio。我的问题是入口负载均衡器没有获得外部 IP。据我了解,我应该使用节点端口来访问入口负载均衡器,但我可以找到这样做的方法。我应该在安装时完成它,我现在可以添加它吗?如何添加?

kubernetes 版本:v1.11.1 calico 版本:v3.1 istio 版本:0.8.0

0 投票
0 回答
409 浏览

kubernetes - 调试 istio 基于内容的路由

我是Istio通过 bookinfo 示例应用程序了解的。此时,我正在测试基于内容的路由,作为调试过程的一部分,我必须在Istio-ingresspod 上使用 curl 命令,但它不存在(这很奇怪,因为根据 istio 站点它应该存在)我应该离线安装(不兴奋)还是应该将 pod 连接到互联网?有没有其他方法可以检查VirtualServiceDestinationRule是否正常工作?

Kubernetes 版本:1.11.1

印花布版:3.1

Istio 版本:0.8.0

我的意思是我创建了VirtualService但它不起作用,我想知道如何调试它,因为 istio 官方站点中提出的方法使用 curl 命令(在istio-ingresspod 中不存在)

这是输出 kubectl get virtualservices -o yaml

0 投票
0 回答
596 浏览

kubernetes - Kube-proxy 或 ELB“延迟”HTTP 请求的数据包

我们在 AWS 的 Kubernetes (1.9.3) 上运行一个 Web API 应用程序(使用 KOPS 设置)。该应用程序是一个部署,由一个服务(类型:LoadBalancer)表示,它实际上是 AWS 上的 ELB(v1)。这通常有效 - 除了某些数据包(HTTP 请求的片段)在客户端 <-> 应用程序容器之间的某处“延迟”。(在 ELB 上终止的 HTTP 和 HTTPS 中)。

从节点端

注意:几乎所有服务器端的数据包都重复 3 次到达

我们使用 keep-alive,因此 tcp 套接字是打开的,请求到达和返回的速度非常快。然后问题发生了:

  • 首先,一个只有标头的数据包到达 [PSH,ACK] (我看到带有 tcpdump 的有效负载中的标头)。
  • 一个 [ACK] 由容器发回。
  • tcp 套接字/流在很长一段时间内都很安静(最多 30 秒或更长时间- 但间隔不一致,我们认为 > 1 秒是一个问题)。
  • 另一个带有 HTTP 数据的 [PSH, ACK] 到达,最终可以在应用程序中处理请求。

从客户端

我已经从我的计算机运行了一些流量,将其记录在客户端以查看问题的另一端,但不能 100% 确定它代表真正的客户端。

  • 带有标题的 [PSH,ASK] 熄灭。
  • 一些带有部分有效负载的 [ACK] 开始发出。
  • 几秒钟(或更长时间)没有响应到达,也没有更多的数据包出去。
  • 标记为[TCP Window update]的[ACK]到达。
  • 再次短暂暂停,[ACK] 开始到达,会话继续,直到有效负载结束。

这仅在负载下发生。

据我了解,这介于 ELB 和 Kube-Proxy 之间,但我一无所知并且迫切需要帮助。

这是 Kube-Proxy 运行的参数:

Commands: /bin/sh -c mkfifo /tmp/pipe; (tee -a /var/log/kube-proxy.log < /tmp/pipe & ) ; exec /usr/local/bin/kube-proxy --cluster-cidr=100.96.0.0/11 --conntrack-max-per-core=131072 --hostname-override=ip-10-176-111-91.ec2.internal --kubeconfig=/var/lib/kube-proxy/kubeconfig --master=https://api.internal.prd.k8s.local --oom-score-adj=-998 --resource-container="" --v=2 > /tmp/pipe 2>&1

我们使用 Calico 作为 CNI:

到目前为止,我已经尝试过:

  • 使用service.beta.kubernetes.io/aws-load-balancer-type: "nlb"- 问题仍然存在。
  • (玩弄 ELB 设置,希望能解决问题¯_(ツ)_/¯)
  • 在 Kube-Proxy 中查找错误,发现很少出现以下情况:

E0801 04:10:57.269475 1 reflector.go:205] k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion/factory.go:85:无法列出 *core.Endpoints:获取https://api。 internal.prd.k8s.local/api/v1/endpoints?limit=500&resourceVersion=0:拨号 tcp:在 10.176.0.2:53 上查找 api.internal.prd.k8s.local:没有这样的主机

...和...

E0801 04:09:48.075452 1 proxier.go:1667] 无法执行 iptables-restore:退出状态 1(iptables-restore:第 7 行失败) I0801 04:09:48.075496 1 proxier.go:1669] iptables 后关闭本地端口- 恢复失败

我找不到任何描述此类问题的内容,并将不胜感激。欢迎提出有关如何继续和排除故障的想法。

最好的,一个