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

kubernetes - 使用裸机负载均衡器为 Kubernetes 服务提供 DNS

我正在尝试将external-dns与裸机负载均衡器一起使用。我尝试使用metallb作为kubernetes负载均衡器,但是A记录中分配的IP地址是负载均衡器的内部IP地址,而不是负载均衡器的公网IP地址。根据 external-dns 文档,如果status.loadBalancer为空(它将始终为空),即使我为服务设置了外部 IP,external-dns 也不会按预期工作。

0 投票
1 回答
704 浏览

kubernetes - 使用 MetalLB 公开 Kubernetes 集群

我有一个由一个主节点和 2 个工作人员组成的裸机集群。主节点有 2 个网络接口。其中一个网络接口分配了一个 PUBLIC_IP。

通过使用主节点中的第二网络接口连接节点。如下:

然后,工人加入如下:

我已经安装了 Weave,如下:

到目前为止一切正常,状态如下:

我正在尝试通过 PUBLIC_IP 公开服务。为此,我安装了 MetalLB,如下所示:

配置图如下:

NGINX 部署如下:

但是,结果如下:

可以看出,外部 IP 仍然为pending. 你有什么想法吗?先感谢您 :)

0 投票
1 回答
915 浏览

kubernetes - k8s:使用 iptables 从公共 VIP 转发到 clusterIP

我试图深入了解从公开暴露的负载均衡器的第 2 层 VIP 转发到服务的集群 IP 的工作原理。我已经阅读了MetalLB如何做到这一点的高级概述,并且我尝试通过设置 keepalived/ucarp VIP 和 iptables 规则来手动复制它。但是我必须遗漏一些东西,因为它不起作用;-]

我采取的步骤:

  1. 创建了一个集群,kubeadm其中包含一个主节点 + 3 个节点,在单台计算机上的 libvirt/KVM 虚拟机上运行 k8s-1.17.2 + calico-3.12。所有虚拟机都在192.168.122.0/24虚拟网络中。

  2. 创建了一个简单的 2 pod 部署并将其公开为设置为的NodePort服务: 我已经验证我可以从主机上的每个节点的 IP 的 32292 端口访问它。externalTrafficPolicycluster
    $ kubectl get svc dump-request NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE dump-request NodePort 10.100.234.120 <none> 80:32292/TCP 65s

  3. ucarp在所有 3 个节点上创建了一个 VIP :(
    ucarp -i ens3 -s 192.168.122.21 -k 21 -a 192.168.122.71 -v 71 -x 71 -p dump -z -n -u /usr/local/sbin/vip-up.sh -d /usr/local/sbin/vip-down.sh来自 knode1 的示例)
    我已经验证我可以 ping 192.168.122.71VIP。我什至可以通过它连接到当前持有 VIP 的虚拟机。
    现在,如果 kube-proxy 处于iptables模式,我还可以通过 VIP 访问其节点端口上的服务http://192.168.122.71:32292。然而,令我惊讶的是,在ipvs模式下,这总是导致连接超时。

  4. 在每个节点上添加了一个 iptables 规则,用于将传入的数据包192.168.122.71转发到服务的 cluster-IP 10.100.234.120:(
    iptables -t nat -A PREROUTING -d 192.168.122.71 -j DNAT --to-destination 10.100.234.120
    后来我也尝试将规则缩小到相关端口,但它并没有以任何方式改变结果:
    iptables -t nat -A PREROUTING -d 192.168.122.71 -p tcp --dport 80 -j DNAT --to-destination 10.100.234.120:80)

结果:

iptables模式下,所有请求都会http://192.168.122.71:80/导致连接超时。

ipvs模式下它部分工作:
如果192.168.122.71VIP 被一个有 pod 的节点持有,那么大约 50% 的请求是成功的,并且它们总是由本地 pod 提供服务。该应用程序还获得了主机的真实远程 IP ( 192.168.122.1)。其他 50%(大概被发送到另一个节点上的 pod)正在超时。
如果 VIP 被没有 pod 的节点持有,那么所有请求都超时。

我还检查了它是否无论如何都会影响结果,以始终将规则保留在所有节点上,而不是将规则仅保留在持有 VIP 的节点上并在 VIP 发布时将其删除:两者的结果都相同案例。

有谁知道为什么它不起作用以及如何解决它?我会很感激这方面的帮助:)

0 投票
2 回答
1161 浏览

nginx - Kubernetes nginx 入口控制器作为负载均衡器获取随机端口

我正在尝试通过单个主裸机集群上的入口公开公开 kubernetes 仪表板。问题是我正在使用的 LoadBalancer(nginx 入口控制器)服务没有打开我希望它打开/使用的 80/443 端口。相反,它需要一些 30-32k 范围内的随机端口。我知道我可以设置这个范围,--service-node-port-range但我很确定一年前我不必在另一台服务器上这样做。我在这里错过了什么吗?

目前这是我的堆栈/设置(Ubuntu 16.04 的全新安装):

  • Nginx 入口控制器(通过 helm 安装)
  • 金属LB
  • Kubernetes 仪表板
  • Kubernetes Dashboard Ingress 公开部署<domain>
  • 证书管理器(通过 helm 安装)

k8s-dashboard-ingress.yaml

这就是我的kubectl get svc -A样子:


以下是正在发生的事情的更多示例:

  1. curl -D- http://<public_ip>:31122 -H 'Host: <domain>'

    • 返回 308,因为协议是 http 而不是 https。这是预期的
  2. curl -D- http://<public_ip> -H 'Host: <domain>'

    • curl: (7) Failed to connect to <public_ip> port 80: Connection refused
    • 80端口关闭
  3. curl -D- --insecure https://10.65.106.240 -H "Host: <domain>"

    • 通过内部 IP 到达仪表板显然是可行的,我得到了正确的 k8s-dashboard html。
    • --insecure是由于无法访问端口 80 上的 acme 挑战,因此让我们加密尚未工作。

回顾一下,我如何开始2.工作?例如,通过 80/443 获得服务?

编辑:Nginx 入口控制器 .yaml


编辑 2:metallb configmap yaml

0 投票
1 回答
1207 浏览

kubernetes - 在裸机 RPI 集群上使用 Metallb 的 LoadBalancer 安装后无法正常工作

我正在摆弄我设置的 RPI 集群,我Kubeadm想让 LoadBalancers 能够在集群上工作。节点的 IP 是静态的,并且设置192.168.1.100-192.168.1.103为主节点和工作节点的范围。

我已经使用官方网站文档安装了 Metallb。

这是我的 Metallb 配置图:

据我了解,您应该给负载均衡器一个超出路由器 DHCP 范围的范围?但即使将地址范围更改为类似的内容192.168.1.200-192.168.1.240也不会改变我得到的结果。

我的路由器的 DHCP 设置。

DHCP 设置

K8s 节点信息

然后我尝试设置一个小型 nginx 部署

运行kubectl get svc返回:

这就是我现在卡住的地方。我似乎无法让 LoadBalancer 与此设置一起使用,而且我不确定我哪里出错了。

金属输出

0 投票
2 回答
4023 浏览

kubernetes - 等待 http-01 质询传播:未能执行自我超时

我设置了一个 kubernetes 集群,当前有两个节点,metallb 作为负载均衡器。

目前我想使用 Ingress 并通过 ssl 保护它。为此,我决定将 nginx ingress 与 cert-manager 一起使用,并在教程结束后将其放在他们的网站上。

但现在我收到错误“等待 http-01 质询传播:未能执行自检 GET 请求‘ http://example.....zone/.well-known/acme-challenge/A5lFUj69fDccpXlvlyVw9-ekATEjt_-DKiJUzJSafxs ’ :获取“ http://example.....zone/.well-known/acme-challenge/A5lFUj69fDccpXlvlyVw9-ekATEjt_-DKiJUzJSafxs ”:拨打 tcp 94.130.150.125:80:连接:连接超时“

我当前的 ClusterIssuer 如下所示:

我正在尝试自动提供证书

手动我可以完美地到达任何地址。

0 投票
1 回答
180 浏览

kubernetes - 如何暴露在 Kubernetes 中运行的服务

我已经安装Charmed-KubernetesUbuntu上。然后是 istio及其bookinfo应用程序。

kubectl exec -it $(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}') -c ratings -- curl productpage:9080/productpage | grep -o "<title>.*</title>"

这返回,简单书店应用程序

kubectl get gateway -> bookinfo-gateway 32s

kubectl get svc istio-ingressgateway -n istio-system

显示外部 IP 地址,但当我尝试使用curl它访问时,什么也没给我。

我也尝试按照此处kubernetes-dashboard描述的方式访问,它也失败了。

基本上,我怎样才能从另一台 PC 访问这些 UI?我已经安装了MetalLB,但仍然没有运气。

参考: 没有带仪表板的端点

kube-dashboard 服务不可用

无法访问 K8 仪表板

流量通过网络代理,会不会有问题?

我是 Kubernetes 的新手。

0 投票
1 回答
152 浏览

kubernetes - 我们需要在 kubernetes 中使用 metalLb 的任何特定路由器吗

我们是否需要 kubernetes 中带有 metalLb 的任何特定 wifi-router/LAN 路由器。

如果 metalLB 在机器上,它如何提供帮助 .. 所有路由器流量都必须首先进入机器,然后再路由;导致机器成为瓶颈。

metalLB 解决方案不应该适合路由器本身的某个地方吗?

0 投票
1 回答
1302 浏览

nginx - Windows 10 单节点 Kubernetes 基础架构上 docker-desktop 社区版上的 MetalLB 外部负载均衡器

我正在尝试设置 metalLB 外部负载均衡器,目的是使用可公开浏览的 IP 地址从集群外部访问 nginx pod。我已按照此处提供的所有步骤进行操作。我已经设法获取服务/nginx 类型的外部 IP:LoadBalancer,但是当我尝试浏览 IP 地址时,我什么也没得到,它说“无法访问此站点”。

运行 kubectl get nodes -o wide 显示

在此处输入图像描述

我想知道在docker-desktop win10环境中是否允许从外部使用公共IP地址访问k8s集群资源?

0 投票
1 回答
1651 浏览

kubernetes - 当我们尝试为负载均衡器(kubernetes)类型的服务 ping 外部 IP 时,究竟会发生什么?

我的集群在本地运行。目前,当我尝试 ping 从 Metal LB 分配给它的服务类型 LoadBalancer 的外部 IP 时。我从托管 Pod 的 VM 之一收到回复 - Destination Host unreachable。这是因为 pod 位于内部 kubernetes 网络上(我使用的是 calico)并且无法 ping 通。对场景的详细解释有助于更好地理解它。此外,所有服务都按预期执行。我只是想知道这背后的确切原因,因为我是新手。任何帮助都感激不尽。谢谢