问题标签 [cilium]
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.
java - pod内丢弃的数据包
我观察到来自 k8s 上的 pod 的 HTTP 调用出现奇怪的间歇性超时。pod 正在运行一个 java 程序,并对其他节点进行 HTTP 调用,甚至在其本地 IP 上返回自身。我们每天几次经历大约 5 到 10 分钟的时间段,即使被调用的远程服务器可用,其中一些 HTTP 调用也会超时。在这些时间窗口中,无论 HTTP 调用是针对其他 pod 还是返回到其自己的本地 IP,超时都会来来去去。
为了说明这个问题,这里有一个日志文件,其中包含 3 个 http 调用和在节点上使用 tcpdump 完成的相关数据包捕获:
这是从正在运行的 docker 容器中获取的那段时间的 tcpdump:
如您所见,在 TCP 转储中甚至没有看到在 22:38:26 对呼叫 2 的请求。这解释了为什么会出现超时,因为请求甚至没有进入网络。
我不知道在哪里看。我们在 Java 代码中尝试了不同的 JVM(hotspot 和 openj9)、不同的 HTTP 客户端。一切都没有变化。如果我们将超时设置得非常高,那没有什么区别——数据包永远不会在 tcpdump 上看到。
k8s集群使用cilium,集群运行正常。这些时候没有网络问题、内存、cpu 峰值。集群中的其他 Pod 没有这个问题。我们已经在 2 个独立设置的不同集群上看到了这个问题,并且运行这个特定 java 微服务的 pod 总是遇到这个问题。在普通 docker 中运行在 k8s 之外的微服务运行良好,没有任何超时。
更多信息:Java 是 jdk 11。容器操作系统是 Ubuntu 18.04。节点位于 AWS EC2 中并运行 k8s v1.13.9。Node OS 是 CoreOS 2345.3.0 (Rhyolite) 内核版本 4.19.106-coreos 的容器 Linux。Docker 是 docker://18.6.3
服务清单:
说明情况的基本图:图表
我们甚至应该从哪里开始寻找可能导致这种情况的任何线索?
go - Go import error: invalid version unknow revision
Code, file structure on left and error
This is the error I get when I run: go run main.go
I am using go mod file for my dependencies and my go version is latest 1.14
I also checked my file structure and I already have cilium@v1.7.2 under pkg/mod/github.com/cilium
I tried adding github.com/optiopay/kafka
under my import statement in my code but i get the same exact error still.
I have no idea how to fix this, I was googling but I could fin no definite or clear answer which worked. Any help appreicated.
azure - 在 Kusto 中解析 `key1=value1 key2=value2`
我在 Azure Kubernetes 集群中运行 Cilium,并希望在 Azure Log Analytics 中解析 cilium 日志消息。日志消息的格式如下
例如:
parse_xxx
我在文档中找不到匹配的方法(例如https://docs.microsoft.com/en-us/azure/data-explorer/kusto/query/parsecsvfunction)。是否有可能编写自定义函数来解析这种日志消息?
kubernetes - AKS cilium 单节点集群不接受连接
我正在关注https://docs.cilium.io/en/v1.9/gettingstarted/k8s-install-aks/并在单节点 AKS 集群上安装了 cilium。问题是,当我使用外部 ip 创建负载均衡器服务时,无法连接到它 - 所有连接都以超时结束。
但是,当我创建具有多个节点的集群时,问题就不存在了。有谁知道这种行为的原因?
kubernetes - 连接到 Kubernetes 中托管的 OpenVPN 服务器时无法访问 k8s 服务
我在 Kubernetes 中使用此映像托管了一个 OpenVPN 服务器。在下面描述的问题之前,当我连接到 VPN 时,我能够访问集群内的互联网和 k8s 服务(使用服务 IP)。
但是,自从我从 Kubernetes 1.20.2 升级到 1.20.4 后,我再也无法访问服务了。我不知道我的云提供商 (Scaleway Kapsule) 是否利用 Kubernetes 更新来更改网络配置。
当我连接到 VPN 时,我可以使用它们自己的 IP 地址访问 Pod,但不能通过服务 IP。
请参阅下面的 OpenVPN 服务器 pod 中的流量转储:
- TCP SYN 到服务 IP。数据包看起来正确伪装(pod IP,不是 VPN 客户端 IP)
- 来自服务目标的一个 pod 的应答(SYN-ACK)(即,由服务选择器匹配)
- OpenVPN pod 拒绝带有 RST 的数据包
从openvpn-gateway-server-udp-7c5b9f974-5q9kb
pod 我可以freshrss.default.svc.cluster.local:80
毫无问题地到达(例如使用 curl)。
所以这个问题似乎只存在于来自 VPN 的数据包。数据包被伪装(参见run.sh)
答案来自与初始目标(服务 IP)不同的 IP(pod IP),但我认为这最近没有改变,所以如果这是问题的根源,那就太令人惊讶了。
有任何想法吗?
谢谢
编辑:可能与这个问题有关,因为底层操作系统有 systemd 245.4-4ubuntu3.2 (Ubuntu 20.04.1)
编辑通过升级到 1.20.6 解决。我无法找到根本原因,无论是 Kubernetes 还是 Scaleway 节点映像。
kubernetes - Cilium-Istio 可以使用 Istio 操作符部署吗?
我们正在迁移到 Cilium 作为我们的 Kubernetes CNI 插件。我们还使用 Istio 服务网格,并希望将 Cilium 的优势带到我们的 Istio 部署中。我知道为了做到这一点,我们需要部署 Cilium 的 Istio 的“仪表化”版本(https://github.com/cilium/istio)。Cilium 提供了一个 istioctl CLI 版本,用于部署 Cilium 的 Istio 版本。但是,我们使用 Istio Operator 在集群中部署/维护 Istio。cilium-istioctl CLI 似乎安装了上游 Istio Operator,然后安装上游 Istio,而不是 Cilium 版本。是否有 Cilium 版本的 Istio Operator?
linux - 无法加载目标“NOTRACK”:没有这样的文件或目录
我正在尝试添加 IP 表规则。
iptables -t raw -A PREROUTING -j NOTRACK
但是,当我执行此操作时,出现以下错误:
iptables v1.8.4(旧版):无法加载目标“NOTRACK”:没有这样的文件或目录
kubernetes - GKE Dataplane v2 NetworkPolicies 不起作用
我目前正在尝试将基于 calico 的集群迁移到新的 Dataplane V2,它基本上是托管的 Cilium 产品。对于本地测试,我正在运行安装了开源 cilium 的 k3d,并创建了一组 NetworkPolicies(k8s 本地策略,而不是 CiliumPolicies),用于锁定所需的命名空间。
我当前的问题是,当在 GKE 集群(启用 DataPlane)上移植相同的策略时,这些相同的策略不起作用。
作为一个例子,让我们看看一些应用程序和数据库之间的连接:
此外,使用 GCP 监控工具,我们可以看到策略对连接性的预期和实际影响:
来自应用程序的日志尝试连接到数据库,但被拒绝:
编辑:
我的本地环境是通过以下方式创建的 k3d 集群:
cilium 本身由 skaffold 安装,通过 helm 使用以下参数:
更新:我已经设置了第三个环境:使用旧 calico CNI(传统数据平面)的 GKE 集群并手动安装了 cilium,如下所示。Cilium 工作正常,甚至 Hubble 开箱即用(与 dataplane v2 不同......),我发现了一些有趣的东西。规则的行为与 GKE 管理的 cilium 相同,但通过 hubble 工作,我能够看到:
由于某种原因,cilium/hubble 无法识别 db pod 并破译其标签。由于标签不起作用,依赖这些标签的策略也不起作用。
另一个证明是来自 hubble 的跟踪日志:
在这里,目标应用程序仅通过 IP 识别,而不是标签。
现在的问题是为什么会发生这种情况?
知道如何调试这个问题吗?可能有什么不同?这些策略是否需要对托管的 Cilium 进行一些调整,或者是 GKE 中的错误?任何帮助/反馈/建议表示赞赏!
mount - 在牧场主桌面上安装 Cilium
我不太确定如何正确地制定这个问题,真的是 k8s 的初学者。我正在笔记本电脑上为 k3s 创建一个游乐场,想要安装 cilium 和 prometheus/grafana 监控。为此,我安装了 rancher-desktop,它创建了在 vm 中运行 k3s 的沙盒环境(在笔记本电脑上运行)
我使用 helm 在 rancher-desktop v1.0.0 上安装了 cilium:
它安装,但纤毛容器无法启动:
这让我相信 bpf 没有安装。现在,我精通 Linux,但实际上是 k8s 的新手。rancher-desktop 打包 k3s 并在 vm 中启动它(我的电脑是基于 Ubuntu 20.04 的)。所以,qemu 启动了这个虚拟机(lima-rancher-desktop),我可以登录它。我假设应该在该 VM 中启用 BPF(事实并非如此)。但是,也许我错了。也许它在 k3s 内的一些容器内?我什至在我的笔记本电脑上启用了 BPF,但这无济于事,k3s 在该 VM 内运行,以下是 pod:
如果有人能解释 BPF 应该安装在哪里,我将不胜感激:在该 VM 内,或在 k3s 上的某个容器内,以及如何安装它?
注意:它无论如何都不会安装在 VM 中:
没有任何效果,也不会挂载任何东西,就好像它是只读的一样。