问题标签 [kubernetes-networking]
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.
kubernetes - Kubernetes UDP服务连接问题
我正在尝试从集群中的节点解析集群内部 DNS。
示例:dig @10.96.0.10 kubernetes.local
(10.96.0.10 是 DNS 的服务 IP)
我希望获得服务的 IP(在本例中为 10.96.0.1),但是连接超时。
只有当我尝试通过 UDP 从集群中的主机连接到服务时,才会发生此问题,而服务的 Pod 未托管在我要连接的节点上。
如果我尝试从在同一节点上运行的 Pod 进行连接,它会按预期工作。
如果我尝试直接连接到 Pod 而不是服务,它会按预期工作。
如果我尝试通过 TCP 而不是 UDP 连接到服务,它会按预期工作。
如果当 Pod 在与我连接的同一节点上运行时尝试连接到服务,它会按预期工作。
我正在Server Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.0", GitCommit:"70132b0f130acc0bed193d9ba59dd186f0e634cf", GitTreeState:"clean", BuildDate:"2019-12-07T21:12:17Z", GoVersion:"go1.13.4", Compiler:"gc", Platform:"linux/amd64"}
使用 flannel pod 网络运行 Kubernetes v1.17 ( ),在 Debian Buster 上运行。
到目前为止,我已经查看了 iptables 规则,服务和 pod 规则似乎是正确的。
的相关部分iptables-save
:
我还在sudo tcpdump -i flannel.1 udp
发送方和接收方上使用了命令,发现包裹被发送,但没有收到。
当我直接寻址 Pod 时,例如通过dig @10.244.1.218 kubernetes.local
,包裹会被正确发送和接收。
kubernetes - NodePort 与 ClusterIP 与 Kubernetes 上的无头服务的性能注意事项
我们在 AWS EKS 上运行两种类型的服务:
- 我们使用 aws-alb-ingress-controller 通过应用程序级负载均衡器公开的面向外部的服务
- 我们直接通过服务名称(对于 EKS 应用程序)和通过内部应用程序级负载均衡器使用的面向内部的服务,也使用 aws-alb-ingress-controller(对于非 EKS 应用程序)
我想了解为外部和内部服务选择 Nodeport、ClusterIP 或无头服务对性能的影响。我的设置适用于所有三个选项。
如果我正确理解网络,似乎无头服务需要更少的跃点,因此会(稍微)更快?然而,这篇文章似乎表明直接调用无头服务时不会正确地进行负载平衡。它是否正确?当通过外部(或内部)ALB 调用时,这是否仍然有效?
NodePort 与 ClusterIP 的性能有什么不同吗?
最后,从集群外部(我们无法访问 Kubernetes DNS)但在同一个 VPC 中使用内部服务的最优雅/高性能的方式是什么?是否会使用 ClusterIp 并在服务定义中指定 IP 地址以使其保持稳定?还是有更好的选择?
kubernetes - 如何在 Kubernetes 中使用 Apache ActiveMQ Artemis
我有一个问题,我在 Kubernetes 中有一个包含 Apache ActiveMQ Artemis 代理的工作负载。当我的工作负载中有一个 pod 时服务器正常启动,当我尝试扩展它们时问题就开始了。Pod 中的代理无法相互连接,因此我无法扩展我的工作负载。我的最终目标是使其可扩展。我在本地使用两个 docker 容器进行了尝试,效果很好。
这是我的broker.xml
:
编辑:附加的 kubernetes,docker configs
部署.yml
运行.sh
kubernetes - Kubernetes 网络插件
我已经使用 calico 网络插件安装了 3 个节点的 Kubernetes 集群。出于某种原因,我决定完全删除 kubernetes 并使用不同的网络插件重新安装它:Flannel。
在我尝试部署我的第一个容器之前,一切似乎都很好。
kubectl describe pod/cassandra
返回以下错误:
通过阅读错误,Kubernetes 似乎仍在使用 calico 插件,尽管我删除了它并安装了 Flannel 插件。
我怎样才能清理这个烂摊子?
kubernetes - pod 和服务 dns 解析
我有一个 Kubernetes 集群,我在其上部署了 pod 和服务。其中一个 pod 应该通过给定其清单的服务名称连接到服务。
所有服务和 Pod 都部署在默认命名空间中。
在查看 pod 的日志时出现以下错误:
我部署了一项名为 cassandra 的服务。
当我在 pod 内运行 nslookup 时,输出如下:
寻求有关如何解决此问题的帮助。
kubernetes - Kubernetes 最佳实践 - 将任意数量的 pod 公开到互联网
我的应用程序需要任意数量的 pod 才能将它们的服务公开到 Internet。我不确定允许从外部服务器(我们称其为客户端)发现这些 pod 的最佳方法是什么。
该工作流由一个外部服务器(客户端)组成,该服务器请求创建一个“车间”部署,并提供一个车间 ID。然后 Kubernetes 创建部署,并在其旁边创建一个 Pod,客户端将使用该 API 在 Pod 上的容器中运行。
客户端应该能够看到所有 Workshop pod 实例,并且必须能够识别哪个 Pod 属于哪个 Workshop。
我已经简化了实际的 kubernetes 基础设施。它使用 CRD 和操作符来设置更复杂的基础设施,但只有 pod 的 API 及其可发现性应该是客户端关心的。解决这个问题的最佳方法是什么?
kubernetes - 为 GCP 上的负载平衡器应用注释以获取 GKE 上的源 IP 防火墙规则
我想在 GKE 上jenkins
使用其官方 helm chart进行安装。
我想使用 LoadBalancer 公开代理服务(端口 50000)(将来自一些远程代理)。
请问这个注解
还有助于保护 GCP 负载均衡器,还是仅适用于 AWS?
在 GKE 内部发起的代理是否仍然需要通过互联网才能到达服务,还是会在内部路由到相应的代理服务?
nginx - Kubernetes - 使用 cloudflare 代理将集群公开给外部访问
我目前有以下设置:
- Cloudflare https 代理 dns 将所有流量路由到我的服务器(使用 CloudFlare Origin CA 进行端到端 [client->proxy 和 proxy->server] 加密)
- Nginx 反向代理,充当我服务器的所有流量的 SSL 终止(我相信原始签名证书)
- Nginx 将访问 kube.my-domain.com 的任何内容代理到我的 kubeapi 服务器,如下所示:
proxy_pass https://127.0.0.1:6443
- kubeapi 在我的服务器上运行
目前我可以通过在我的 kubeconfig 中指定来很好地连接到我的集群:
但是,如果我将 kubeconfig 中的服务器更改为指向我的域:server: https://kube.my-domain.com
我收到以下错误:
现在我假设这是因为我的流量必须通过 cloudflare 的代理,并且一路上有不同的证书。所以我尝试附加 --insecure-skip-tls-verify=true 并得到以下响应:
所以我查了一下,发现很多时候是因为 RBAC(即使我应该以 kubernetes-admin 身份进行身份验证,当我在本地连接时它工作......)
我究竟做错了什么?此外,公开我的集群并确保其安全的最佳方式是什么?
我觉得这与 NGINX 的 SSL 终止有关,删除了 api-server 识别我所必需的东西。
谢谢。
更新:似乎 cloudflare 代理 pr NGINX 正在剥离身份验证证书和密钥,因此导致请求的用户变得匿名。还在研究这个。
kubernetes - 节点间 pod 到 pod 通信是不可能的……为什么?
我是 k8s 的新手,但我知道,作为 k8s 的要求,每个 Pod 都应该可以从任何其他 Pod 访问。但是,这在我的设置中没有发生:我无法从 Pod 中的另一个节点中的另一个 Pod ping 通。
这是我的设置:
我有一个主节点 ( sauron
) 和三个工作节点 ( gothmog
, angmar
, khamul
)。我已经通过以下方式安装了weave
网络:
这是输出kubectl get pods -n kube-system -o wide
这是我的部署 yaml 文件内容:
通过 应用部署后kubectl apply -f mydeployment.yaml
,我验证了 pod 已启动。但只是无法 ping 他们自己的内部(pod)IP 地址之外的任何东西。
好像不能 ping 还不够,my-deployment-77bbb7579c-4cnsk
运行的 podangmar
有一个 IP 10.38.0.0
,我觉得这太奇怪了……为什么会这样?
此外,每个容器中都有一个/etc/resolv.conf
with nameserver 10.96.0.10
,在任何容器/pod 中都无法访问。
我应该怎么做才能khamul
从gothmog
(10.32.0.2)中的 pod ping 10.44.0.2(运行中的 pod)?
更新1:
每个节点上 weave pod 的一些错误输出是:(
sauron
主):
khamul
(工人):
gothmog
(工人):
angmar
(工人):
更新 2:
所有 my-deployment pod(独立于它们运行的位置)都包含这个完全相同的/etc/resolv.conf
文件:
谢谢!
kubernetes - Kubernetes集群中处理和转发网络数据包的网关应用程序
我正在尝试在 Kubernetes 集群中构建一个网络应用程序,它处理两台服务器之间的数据包,并为通过应用程序的流量提供安全服务。以下几点总结了此应用程序的工作原理:
Server1 和 Server2 通过 IPsec 隧道连接到网络网关应用程序。
Server1发送的报文被封装在IPsec隧道中,发往Server2,即内层报文中的目的IP地址为Server2 IP地址。
IPsec 服务器在集群中的一个 Pod 中运行。这已被定义为 Kubernetes 服务 IPSEC。
我创建了另一个 Kubernetes 服务,称为 TELEMETRY,它适用于网络数据包。该服务从数据包中收集一些遥测数据,并可选择对数据包应用一些策略。
在这个 IPSEC pod 上接收到的解密数据包,其目标 IP 地址与 Server2 IP 地址相同,需要转发到 TELEMETRY 服务 pod。
TELEMETRY 服务 pod 处理数据包并将其转发回 IPSEC pod,以便数据包可以通过 IPsec 隧道转发到实际目标 Server2。
一旦这可行,我还计划在 TELEMETRY 之后添加几个服务,以便 TELEMETRY 服务 pod 将数据包转发到这些服务。链中的最后一个服务会将其转发回 IPSEC pod。
我在将 IP 数据包从一个 Pod 转发到另一个 Pod 时面临挑战。我想将不发往集群中任何服务或 pod 的数据包从一个 pod 转发到另一个 pod。我探索了 Flannel,但如果目标 pod 在同一节点上运行,它不会转发覆盖上的数据包。由于用户和内核空间之间存在多个数据包副本,从性能角度来看,这似乎不是一个好的解决方案。
如果有人可以提出一个很好的解决方案,将 IP 数据包从我的应用程序中的一个 pod 转发到另一个 pod,那将是非常有帮助的。