问题标签 [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.
kubernetes - 使用裸机负载均衡器为 Kubernetes 服务提供 DNS
我正在尝试将external-dns与裸机负载均衡器一起使用。我尝试使用metallb作为kubernetes负载均衡器,但是A记录中分配的IP地址是负载均衡器的内部IP地址,而不是负载均衡器的公网IP地址。根据 external-dns 文档,如果status.loadBalancer
为空(它将始终为空),即使我为服务设置了外部 IP,external-dns 也不会按预期工作。
kubernetes - 使用 MetalLB 公开 Kubernetes 集群
我有一个由一个主节点和 2 个工作人员组成的裸机集群。主节点有 2 个网络接口。其中一个网络接口分配了一个 PUBLIC_IP。
通过使用主节点中的第二网络接口连接节点。如下:
然后,工人加入如下:
我已经安装了 Weave,如下:
到目前为止一切正常,状态如下:
我正在尝试通过 PUBLIC_IP 公开服务。为此,我安装了 MetalLB,如下所示:
配置图如下:
NGINX 部署如下:
但是,结果如下:
可以看出,外部 IP 仍然为pending
. 你有什么想法吗?先感谢您 :)
kubernetes - k8s:使用 iptables 从公共 VIP 转发到 clusterIP
我试图深入了解从公开暴露的负载均衡器的第 2 层 VIP 转发到服务的集群 IP 的工作原理。我已经阅读了MetalLB如何做到这一点的高级概述,并且我尝试通过设置 keepalived/ucarp VIP 和 iptables 规则来手动复制它。但是我必须遗漏一些东西,因为它不起作用;-]
我采取的步骤:
创建了一个集群,
kubeadm
其中包含一个主节点 + 3 个节点,在单台计算机上的 libvirt/KVM 虚拟机上运行 k8s-1.17.2 + calico-3.12。所有虚拟机都在192.168.122.0/24
虚拟网络中。创建了一个简单的 2 pod 部署并将其公开为设置为的
NodePort
服务: 我已经验证我可以从主机上的每个节点的 IP 的 32292 端口访问它。externalTrafficPolicy
cluster
$ 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
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 的示例)
我已经验证我可以 ping192.168.122.71
VIP。我什至可以通过它连接到当前持有 VIP 的虚拟机。
现在,如果 kube-proxy 处于iptables
模式,我还可以通过 VIP 访问其节点端口上的服务http://192.168.122.71:32292
。然而,令我惊讶的是,在ipvs
模式下,这总是导致连接超时。在每个节点上添加了一个 iptables 规则,用于将传入的数据包
192.168.122.71
转发到服务的 cluster-IP10.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.71
VIP 被一个有 pod 的节点持有,那么大约 50% 的请求是成功的,并且它们总是由本地 pod 提供服务。该应用程序还获得了主机的真实远程 IP ( 192.168.122.1
)。其他 50%(大概被发送到另一个节点上的 pod)正在超时。
如果 VIP 被没有 pod 的节点持有,那么所有请求都超时。
我还检查了它是否无论如何都会影响结果,以始终将规则保留在所有节点上,而不是将规则仅保留在持有 VIP 的节点上并在 VIP 发布时将其删除:两者的结果都相同案例。
有谁知道为什么它不起作用以及如何解决它?我会很感激这方面的帮助:)
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
样子:
以下是正在发生的事情的更多示例:
curl -D- http://<public_ip>:31122 -H 'Host: <domain>'
- 返回 308,因为协议是 http 而不是 https。这是预期的
curl -D- http://<public_ip> -H 'Host: <domain>'
curl: (7) Failed to connect to <public_ip> port 80: Connection refused
- 80端口关闭
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
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 设置。
K8s 节点信息
然后我尝试设置一个小型 nginx 部署
运行kubectl get svc
返回:
这就是我现在卡住的地方。我似乎无法让 LoadBalancer 与此设置一起使用,而且我不确定我哪里出错了。
金属输出
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 如下所示:
我正在尝试自动提供证书
手动我可以完美地到达任何地址。
kubernetes - 如何暴露在 Kubernetes 中运行的服务
我已经安装Charmed-Kubernetes
在Ubuntu上。然后是 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,但仍然没有运气。
参考: 没有带仪表板的端点
流量通过网络代理,会不会有问题?
我是 Kubernetes 的新手。
kubernetes - 我们需要在 kubernetes 中使用 metalLb 的任何特定路由器吗
我们是否需要 kubernetes 中带有 metalLb 的任何特定 wifi-router/LAN 路由器。
如果 metalLB 在机器上,它如何提供帮助 .. 所有路由器流量都必须首先进入机器,然后再路由;导致机器成为瓶颈。
metalLB 解决方案不应该适合路由器本身的某个地方吗?
nginx - Windows 10 单节点 Kubernetes 基础架构上 docker-desktop 社区版上的 MetalLB 外部负载均衡器
我正在尝试设置 metalLB 外部负载均衡器,目的是使用可公开浏览的 IP 地址从集群外部访问 nginx pod。我已按照此处提供的所有步骤进行操作。我已经设法获取服务/nginx 类型的外部 IP:LoadBalancer,但是当我尝试浏览 IP 地址时,我什么也没得到,它说“无法访问此站点”。
我想知道在docker-desktop win10环境中是否允许从外部使用公共IP地址访问k8s集群资源?
kubernetes - 当我们尝试为负载均衡器(kubernetes)类型的服务 ping 外部 IP 时,究竟会发生什么?
我的集群在本地运行。目前,当我尝试 ping 从 Metal LB 分配给它的服务类型 LoadBalancer 的外部 IP 时。我从托管 Pod 的 VM 之一收到回复 - Destination Host unreachable。这是因为 pod 位于内部 kubernetes 网络上(我使用的是 calico)并且无法 ping 通。对场景的详细解释有助于更好地理解它。此外,所有服务都按预期执行。我只是想知道这背后的确切原因,因为我是新手。任何帮助都感激不尽。谢谢