问题标签 [metallb]

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

kubernetes - 如何将一个 Node Kubernetes Ingress Service 的外部 IP 暴露到 Internet

我安装了一个带有kubeadm. 这是在vServer具有专用外部静态 IP 的“裸机”上。

使用这些组件/设置:

  • 印花布(默认设置)
  • MetalLB(第 2 层配置,地址范围192.168.1.240-192.168.1.250
  • Traefik(默认设置)

现在 traefik 服务被公开为“外部 IP”,但 IP 是192.168.1.240. 从 k8s 的角度来看,这是外部的,但我如何将入口服务公开到互联网?

我不想设置额外的外部负载平衡器。我怎样才能做到这一点?

0 投票
1 回答
71 浏览

kubernetes - MetalLB 为 Istio 入口网关分配一个 LoadbalancerIP

是否可以使用 metalLB 将 LoadbalancerIP 分配给入口网关?鉴于此 yaml,它会引发有关 loadBalancerIP 的错误(io.istio.networking.v1alpha3.Gateway.spec 中的“未知字段”loadBalancerIP“),我可以通过使用'--validate = false'标志来解决它,但metalLB是没有分配正确的 IP 地址?

测试.yaml:

层2.yaml:

运行 kubectl 命令:

请注意,它从 MetalLB 获得了错误的 EXTERNAL-IP 地址。

0 投票
1 回答
140 浏览

jenkins - 无法从 Metallb 下的 kubernetes 集群外部访问 Jenkins Pod

我有一个运行 Jenkins Pod 的 Kubernetes 集群,该集群为 Metallb 设置了服务。目前,当我尝试在loadBalancerIP集群外部访问 pod 时,我无法做到。我还有一个kube-verify在集群上运行的 pod,它的服务也使用 Metallb。当我尝试在我的集群之外击中那个 pod 时,我可以毫无问题地击中它。

当我将 Jenkins pod 的服务切换为类型NodePort时,它可以工作,但是一旦我将其切换回类型LoadBalancer,它就会停止工作。Jenkins pod 和工作kube-verifypod 都在同一个节点上运行。

集群详细信息:主节点正在运行并以无线方式连接到我的路由器。在主节点上,我设置了 dnsmasq 以及将连接从无线端口转发到以太网端口的 iptable 规则。每个节点通过以太网通过交换机连接在一起。Metallb 在 layer2 模式下设置,地址池与主节点无线端口的 IP 地址位于同一子网中。kube-proxy设置为使用和strictArp模式ipvs

詹金斯清单:

此 Jenkins 清单是 Jenkins helm-chart 生成的修改版本。我编辑了我的秘密,但在实际清单中有base64编码字符串。此外,我在部署中创建和使用的 docker 镜像使用 Jenkins 2.323-jdk11 镜像作为基础镜像,并且我刚刚安装了一些用于 Configuration as Code、kubernetes 和 Git 的插件。使用 Metallb 时,什么可能会阻止 Jenkins pod 在我的集群外部访问?

0 投票
0 回答
89 浏览

microk8s - microk8s 端口 443 连接拒绝与 metallb 和大使边缘堆栈的错误

我在笔记本电脑上运行 microk8s 系统,使用 metallb 作为负载平衡器,使用大使边缘堆栈作为入口。一切正常,包括一个运行 kubectl 调用的 bash 脚本来设置它并删除它等。

当我尝试将相同的设置安装到我们要用于 QA 的本地服务器上时,就会出现问题。我运行我的脚本,但它在中途失败。microk8s 运行良好,我可以看到 metallb 和 Ambassador 都设置正确(即与我的笔记本电脑上的相同)。但是每个请求都返回“连接到 192.168.50.40 端口 443 失败:连接被拒绝”,这是我的脚本失败的地方。

我认为它可能与路由器有关,因此我在 /etc/hosts 中添加了一个条目,以将消息中的 ip 地址映射到我使用的域名。我可以从服务器上的终端窗口 ping 域名,并得到预期的成功响应。但是,如果我尝试使用 https URL 的 curl 命令,我会收到相同的连接被拒绝错误,这意味着它与外部连接无关。

我的入口只监听 https,而不是 http,但我将其设置为监听 http(端口 80)并尝试过,得到相同的连接被拒绝错误。当我在笔记本电脑上做同样的事情时,它给了我一个成功的响应。

我的笔记本电脑设置和本地服务器之间的区别是:

  • 在 metallb 上设置了不同的 IP 地址范围。
  • 不同的域名
  • 不同的 TLS 证书

所有这些都作为参数传递给设置脚本。本地服务器还具有两个以太网接口,一个在消息中显示,另一个是 192.168.50.50。我注意到 metallb 正在监听第二个,所以我编辑了 kubelet 文件 (/var/snap/microk8s/current/args/kubelet) 以指定正确的地址,重置 microk8s 并验证它现在使用正确的地址。metallb 命令只是

即池中的一个地址。我在我的笔记本电脑上做同样的事情,但地址不同。

但它仍然给我这个错误。我在 metallb 日志和大使日志中看不到任何可能的错误,实际上也没有证据表明请求已达到。我的同事一直在暗示大使配置有问题,但它与工作笔记本电脑版本完全相同(除了上述参数),所以我很难对此保持开放的态度。

我们检查了防火墙规则(尽管我希望内部请求没有触及防火墙)并且它们很好,让 443 的所有内容都通过。但是有些东西在某处阻止了 443 请求。有人知道我接下来应该看什么吗?谢谢你的帮助。

更新:我提到问题机器上有两个接口:192.168.50.40和192.168.50.50。我们一直在尝试使用第一个,但今天早上我们切换到使用第二个。突然间一切正常。似乎 microk8s 中的某些东西真的只喜欢其中一个接口,现在的问题是为什么。

版本(两种环境相同): 操作系统:Ubuntu 20.04.3 LTS microk8s:1.22 metallb:0.9.3 Ambassador:2.0.5

0 投票
1 回答
42 浏览

kubernetes - 无法从 K8s 节点访问服务(MetalLB Layer2)

我在 VMware vSphere 私有云上裸机部署了 Kubernetes 集群。

规格:

  • 操作系统:Ubuntu 20.04.3 Cloud Image(也在尝试 18.04 和 21.04)
  • Kubernetes:1.23.1(也在尝试 1.21.8)- 使用 kubeadm 和 kube-proxy 解聚(使用 strictARP 和 ipvs 模式)
  • CRI:码头工人 20.10.12
  • MetalLB v0.11.0(第 2 层模式)
  • 纤毛 1.11.1
  • 192.168.50.0/24 子网中的所有节点

当我简单地添加部署时:
kubectl create deployment nginx --image k8s.gcr.io/nginx:latest

并曝光:
kubectl expose deployment nginx --type=LoadBalancer --port=80

一切似乎都很好。服务从 MetalLB 池中获取 ExternalIP:
nginx LoadBalancer 10.96.56.118 198.168.50.152 80:32325/TCP 4s

kube-ipvs0 接口上发布的新 ip 地址:

kube-ipvs0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default
...
inet 198.168.50.152/32 scope global kube-ipvs0
valid_lft forever preferred_lft forever
...

但是我无法从所有通过 ExternalIP 的 K8s 节点以及其他 LAN 访问服务,curl 返回:
curl: (7) Failed to connect to 192.168.50.152 port 80: No route to host

ClusterIP 运行良好,我可以从节点访问它。

0 投票
0 回答
58 浏览

postgresql - 使用 MetalLB 和 Nginx-Ingress 公开端口 80、443 和 5432 (Postgres)

我正在做一个学校项目,我有裸机 VPS,我正在尝试使用 Postgres 数据库(必须可以从外部访问,即:5432)部署 Web 应用程序(nginx 入口)。我在 Google 和 StackOverflow 上浏览了数十个链接,但实际上没有任何结果 - 我还在Connection refused. Is the server running on host "<>" and accepting TCP/IP connections on port 5432?

我已经通过几个简单的步骤成功部署了 MetalLB:

  1. 安装 metallb
  1. 创建 config.yaml
  1. 创建 LoadBalancer 服务
  1. 并创建了 Nginx 部署(nginx-deployment.yaml)

现在在runnign之后kubectl apply -f config.yamlkubectl apply -f nginx-deployment.yaml我能够解决“欢迎使用nginx!” curl <VPS-external-IP>:80 输出:

但真正的问题现在来了。我需要使用 :5432 访问 Postgres 数据库,但老实说,我只是迷失在 Kubernetes 中......

我已经为 Postgres 创建了所有必要的东西,以使其运行,例如:

  1. PersistentVolume 和 PersistentVolumeClaim(我认为这里没有必要分享,因为它只是基本的 PersistentVolume 和 PersistentVolumeClaim yaml)
  2. 秘密(我认为这里没有必要分享,因为它只是yaml的基本秘密)
  3. 配置映射
  1. Postgres 部署
  1. 当然 - Postgres 服务

postgres 本身似乎工作。

(我已经删除并重新创建了很多次(因此为什么这么低的年龄...... :-())

因此,即使我在 5432 上运行了 postgres/db 服务,并且在 Nginx 上运行了 MetalLB LoadBalancer,它只是不会将 5432 暴露给世界。我会对所有建议感到非常高兴,因为我开始放松一开始的炒作,即设置 Kubernetes 会有多好...... :-)

谢谢你。

更新 31.1.2022

我已经使用 Kubeadm 逐步安装了 Kubernetes,并使用了几个在线教程和官方文档。的输出kubectl version

kubeadm version

0 投票
1 回答
35 浏览

load-balancing - 从外部 HAProxy 访问时,metallb 循环无法正常工作

我有一个示例应用程序在具有 3 个副本的 kubernetes 集群中运行。我正在使用 metallb 公开 type=LoadBalancer 的应用程序。

发出的外部ip是10.10.10.11

当我运行时,curl 10.10.10.11我会得到一个不同的 pod 来响应每个请求,正如您对轮询所期望的那样。这是我想要的行为。

我现在已经设置了一个后端指向 10.10.10.11 的 HAProxy,但是每次我访问 HAProxy 前端时,我都会得到相同的节点来响应每个请求。如果我不断刷新,我会间歇性地获得不同的 pod,有时在 20 次刷新后,有时在 50 次以上刷新后。我已经尝试清除我的浏览器历史记录,但没有任何效果。

我认为这是我的 HAProxy 配置导致问题的原因,也许是缓存?但我没有配置任何缓存。我是一个 HAProxy 新手,所以我可能会遗漏一些东西。

这是我的 HAProxy 配置。

我都尝试过mode tcpand mode http,但都给出了相同的结果(同一个 pod 响应每个请求)

更新

经过进一步测试,该问题似乎与timeout client, timeout connect, timeout server. 我将这些时间减少到 1 秒,然后我每 1 秒得到一个不同的 POD,但是这些时间太短了,我也会遇到间歇性连接失败。

所以,我也有这个问题。HAProxy 是否能够在另一个负载均衡器前作为反向代理工作,还是我需要使用另一种技术,例如 Nginx?

0 投票
0 回答
20 浏览

kubernetes - MetalLB 无法访问外部 IP 地址

我在 vSphere 上的 Rocky Linux 虚拟机上部署了一个 3 节点 Rancher RKE 自定义集群。

我在集群上部署了 MetalLB,并从我的节点网络中定义了 IP 池。当我创建一个 LoadBalancer 服务时,一切看起来都很好,并且我从池中获取了外部 IP 地址,但是我无法从节点 ip 网络访问此 IP 地址,我什至无法从节点本身访问它,当我尝试curl 从我无法到达的节点之一到外部 IP 地址(没有到主机的路由)。

卷曲到集群 IP 或 pod 本身可以正常工作。

此外,如果我为 pod 创建一个 NodePort 服务,我可以从集群外部毫无问题地访问它。有任何想法吗?

0 投票
0 回答
25 浏览

kubernetes - 使用 Metallb 和 Microk8s 进行 UDP 负载平衡

我在两个 Ubuntu 20.04 系统上安装了 MicroK8s。一个被分配为 CP,我将第二个系统作为节点加入集群。

我正在尝试使用 syslog-ng 启动几个 pod,以消耗端口 UDP/514 上的 syslog 流量。我正在从外部系统生成一些合成 syslog 流量,以查看负载平衡的运行情况。但是,在任何给定时间,我只看到其中一个使用数据的 pod。以下是我的 yaml 文件:

我希望看到两个 pod 都在积极地使用 syslog 数据,但事实并非如此。难道我做错了什么?感谢您的帮助。

0 投票
0 回答
30 浏览

kubernetes - Microk8s、MetalLB 和 Emissary 入口集成

我有一个带有 3 个节点(1 个主节点和 2 个工作节点)的 Microk8s 集群。我启用了 dns 和 metallb(使用主节点的单个公共 ip)插件并使用 Helm3 安装了 Emissary Ingress。

一切都已启动并运行,Emissary 服务的类型为 LoadBalancer,并从 MetalLB 获取正确的外部 ip。

在此之后,我正在尝试为 Sonarqube 服务设置映射。这些是yaml:

在防火墙方面,我有这个:

但是,当我尝试连接时,出现连接被拒绝错误。似乎没有人在听 80 或 443。有人可以帮忙吗?谢谢