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

kubernetes - MetalLB 在 Kubernetes 中的工作原理

谁能解释一下 MetalLB 如何在 Kubernetes 环境中获取 IP 地址?我已经在 GCP 计算引擎中安装了 Kubernetes 集群。我在 MetalLB ConfigMap 中提供了一系列内部 IP 地址。

在我的情况下,我在 CM 中给出的 IP 范围是 10.140.0.30-10.140.0.40

它按预期工作,但我想知道 MetalLB 如何获取 IP 地址。

0 投票
0 回答
127 浏览

haproxy - MicroK8s,家庭设置的 HA-Proxy。如何配置端口转发?

我有的:

单个节点上的 Microk8s 集群。具有唯一入口域地址的多个 WordPress 部署。我使用 No-Ip 将每个域映射到我的家庭 IP。我的路由器端口将这些请求转发到我的单个节点的 IP。我所有的入口控制器都指向负载均衡器的 127.0.0.1。

我想要的是:

添加另一个节点以使我的家庭网络具有高可用性。将我的路由器配置为指向将请求转发到健康节点的单个 IP(如果其中一个失败)

我需要的支持:

我对如何有效地实现这一点有点困惑。

如果我的原始节点出现故障,我的路由器将无法向它转发任何请求,我必须手动将端口转发设置更改为新节点。

我已经阅读了一些关于插件 metallb 的内容,但很难看到这将如何解决我的问题,因为我看到的所有示例都只是用于部署的 pod 之间的负载平衡,并没有解决我的节点 IP 问题。

笔记:

我还没有尝试过任何这些,因为我没有额外的硬件并且想要避免任何长时间的停机,这就是为什么我首先需要我的理解是正确的。

任何帮助/提示/指导将不胜感激。

0 投票
1 回答
275 浏览

html - 未找到 Kubernetes 入口 css 和 jv

我使用kubeadm. 服务被声明为ClusterIP. 目前我正在尝试将我的应用程序部署为loadbalancerMetallb 类型的入口,但我遇到了一些问题。如果我将我的应用程序部署为入口,则找不到一些 jv 和 css 组件。将应用程序作为服务运行没有问题,但在我使用 Ingress 时出现了问题。它是一个 ASP.NET Core 应用程序

我的入口来源:

我的部署源:

我的服务来源:

应用程序的 html 文件:

如果我在浏览器中打开控制台,我可以看到404 not found所有 type 元素都有<script>

0 投票
1 回答
157 浏览

kubernetes-ingress - 如何使用 MetalllLB 为 Ingress 设置 DNS 不起作用?

以前,我尝试使用 NodeIP 使其工作入口。 如何让 My First ingress 在裸机 NodeIP 上运行? 它也不起作用,也许问题和现在一样,我没有正确配置它。

我放弃了这个选项并尝试了 MetalllLB + Ingress

!我在这两种情况下所做的:!我仅在我的工作机器上通过 /etc/hosts 安装了 DNS。

带 Hel​​m 的安装 metallb:

值.yaml

使用 Helm¶ 安装入口控制器:

获取 svc -A

提供服务

进入:

kubectl 获取 svc -A

检查“你好”吊舱

service_hello_Node.yml

卷曲-I 10.0.57.35:31263

kubectl 描述 pod ingress-nginx-controller-fd7bb8d66-mvc9d

请帮助我为什么入口不起作用。也许我需要以特定方式自定义 DNS?

Service 和 Ingress 在同一个命名空间中。Ingress Controller 在不同的地方。

我查看入口控制器日志 - 什么都没有,这正常吗?

kubectl 描述 pod ingress-nginx-controller-fd7bb8d66-mvc9d

kubectl 获取 pod -A

0 投票
0 回答
573 浏览

kubernetes - k3s MetalLB ingress-nginx裸机服务器入口问题

我暂时决定使用 Kubernetes,最好是使用 Rancher,这样我就可以在我的家庭办公室设置中轻松启动和关闭容器化应用程序并运行 Web 服务器等。我有一个相当正常的互联网设置,路由器通过我的 ISP 的静态 IP 连接到互联网。我希望能够在办公室 LAN 上的裸机服务器上安装 Web 应用程序,以便其中一些可以通过 Internet 访问,而另一些只能通过 LAN 访问。我已经决定将 k3s 作为 Kubernetes 发行版。

我打算使用从路由器到服务器上的 IP 地址的端口转发,并在其上托管不同域的多个 Web 服务器。路由器最初会通过路由器上的主机名条目找到应用程序,但稍后可能会通过托管在 k3s 上的 DNS 服务器找到应用程序。

仔细阅读,我需要 MetalLB 和 Kubernetes 安装上的某种 Ingress 控制器。
MetalLB 为 k3s “集群”和入口控制器提供 IP 地址,以执行到 k3s 集群中各个服务器的第 7 层路由。我发现 ingress-nginx 可能是一个合适的入口,但我的安装有几个我无法解决的问题。我希望 MetalLB 在服务器网络 i/f 上广播多个 IP 地址:

一个 IP 用于通过端口转发从外部访问的应用程序,另一个 IP 用于那些仅具有内部可访问应用程序的服务器。

我在下文中追求的是简洁而不是简洁,因为我认为这是一个足够复杂的设置,是必要的。我给出了各个部分的确切安装说明,以便人们可以准确地看到我在做什么:

安装 k3s:

curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.21.4+k3s1 sh -s -

然后通过编辑 /etc/systemd/system/k3s.service 禁用 Traefik 和 servicelb,使 ExecStart 行变为:

ExecStart=/usr/local/bin/k3s server --disable traefik --disable servicelb

安装 CertManager 如下:

安装 MetalLB:

在 metallb-config.yaml 中使用以下内容:

跑:

kubectl apply -f metallb-config.yaml

安装 nginx:

其中 ingress-nginx-baremetal-github.yaml 是https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.1/deploy/static/provider/baremetal/deploy.yaml中引用的文件在https://kubernetes.github.io/ingress-nginx/deploy/#bare-metal部分 Bare-metal 的 ingress-nginx 安装页面上进行了以下更改:

即,已添加注释“metallb.universe.tf/address-pool:inetfa”并将NodePort更改为LoadBalancer。

我已经使用 bitnami Apache 安装了服务器,如下所示:

helm install my-release -f apache1-configmap.yaml bitnami/apache

此设置更改的目的是使 ingress-nginx 安装使用 MetalLB 通过匹配的地址池名称“inetfa”分发的 IP 地址 192.168.1.16

我的服务器应用程序使用的 IP 地址是 192.168.1.17/32,尽管基于“apache1-configmap.yaml”文件,第 7 层路由工作正常,例如:

所以,回顾一下我所拥有的:

我可以拥有多个具有不同主机名的 apache 服务器。Ingress-nginx 基于主机的路由根据各自 apache configmap.yaml 文件中的主机名工作到每个服务器

它们都来自 MetalLB 在其地址池中看到的第一个 IP,而不是根据需要在 ingress-nginx 设置中由注释选择的 IP。

似乎它是使用的第一个地址池,它没有设置“自动分配:false”,无论 metallb.universe.tf/address-pool: 注释和地址池名称如何。这不好,因为我需要在所有地址池上使用“auto-assign: false”,以防止在 Web 上访问错误的服务应用程序。

谁能看到我做错了什么以及我需要改变什么才能让地址池选择在 MetalLB 和 ingress-nginx 之间工作?

当我为面向 Internet 的应用程序选择地址池时,我想让另一个地址池为面向 LAN 的应用程序工作,如果我需要单独安装 nginx,或者是否需要单独安装 nginx,我将不胜感激这是一种安装一个 ingress-nginx 以支持多个 IngressClass 的方法,因此“ingress-nginx-baremetal-github.yaml”提供的“nginx” IngressClass 可以通过例如“nginxlanonly”IngressClass 来补充,该 IngressClass 使用不同的地址池。如果该想法行不通,任何人都知道如何做到这一点或如何实现相同的目标?

0 投票
0 回答
24 浏览

kubernetes - 服务阻止的 Kubernetes UDP 响应是否来自另一个 pod

我的系统由 UDP 客户端组成,该客户端向 Kubernetes 部署生成的服务器发送 UDP ping 消息。该服务器由 metallb 负载平衡器服务后面的 2 个副本组成。

实际的消息路由如下:

  • 其中一个 pod(比如 POD1)接收到消息
  • POD1 将它(使用源 ip 和端口)存储在缓存中
  • POD1 进入空闲状态
  • 副本集的另一个 pod(POD2)获取缓存的消息和源地址
  • POD2 回复
  • POD2 收到端口不可达 ICMP 错误。

我认为,由于我的 UDP 响应源 IP 与原始请求的目标 IP 不同,因此服务无法映射最终目标 IP。

我觉得我缺少解决我问题的注释。metallb 负责端口映射吗?我是否被迫改用 UDP 代理服务器?如果是这样,您可以分享一个已经实施的解决方案吗?

0 投票
0 回答
24 浏览

mysql - MySQL 客户端挂起连接到 MetalLB 后面的数据库 pod

背景:我在我的 homelab 中运行一个 K3S 集群,MetalLB 提供入口。我在 Pod 中有一个带有单个 MySQL 容器的 StatefulSet,通过 MetalLB 作为服务公开。当我使用 MySQL 命令行通过服务 IP 地址连接到数据库时,它可以正常进行一些查询,然后挂起。在 pod 中使用 kubectl port-forward,一切正常,没有挂起。

有任何想法吗?

0 投票
0 回答
75 浏览

kubernetes - metallb提供的IP不可访问

我有一个带有金属 LB 的裸机 Kubernetes 集群。我已将 GCP 外部负载均衡器用于分配给 Metallb 的 IP。Metallb 已将该 IP 分配给服务,但我仍然无法从集群外部访问该 IP 上的服务。

0 投票
0 回答
276 浏览

k3s - LoadBalancer 服务 External-IP 在 K3s 中与 MetalLB 挂起

我正在尝试按照Just Me And Opensource 的本教程设置 K3s、MetalLB 和 Traefik。我安装了没有 servicelb 或 traefik 的 K3s。

curl -sfL https://get.k3s.io | sh -s - server --disable traefik --disable servicelb

我按照教程进行了部署,并部署了 Nginx LoadBalancer 以测试 MetalLB 是否会从 configmap 的范围内传递一个 IP。但是,LoadBalancer 服务 EXTERNAL-IP 仍处于挂起状态。

我不确定如何解决此问题。我检查了组件,它们看起来都很开心,我没有看到错误或警告。我已验证我配置的 IP 范围在网络中可用。

我可以采取哪些步骤来解决此问题?

这是配置映射的内容。

0 投票
0 回答
35 浏览

kubernetes - JupyterHub 未在 Helm 上启动 | K8s

我有一个 metalLB 负载均衡器、k8s 集群(一个 master 和一个 worker)v1.18.5、helm 3.7,以及使用 helm 的 nfs 动态卷配置。我用 helm 运行了一个 jupyterhub 实例。在一分钟内,一切都设置好了,但是当我使用外部 IP 在浏览器上打开 JupyterHub 时,注意到加载。这是我的kubectl get all

另外,以下是我的存储类供参考:kubectl get sc

我不会粘贴配置文件,因为它非常大,基本上我所做的是 helm show values jupyterhub/jupyterhub > /tmp/jupyterhub.yaml (在更改了一些值之后) helm install jupyterhub jupyterhub/jupyterhub --values /tmp/jupyterhub.yaml 我更改的唯一几件事是安全密钥(十六进制 [如网站上所述])以及编写 nfs-客户端无论它说 storageClass 和 storageClassName 并且可能会改变存储大小(1Gi / 2Gi)。就这样。LoadBalancer 工作正常,因为我运行了 nginx,我可以轻松地在浏览器上打开它。所以我决定首先使用以下方法获取 pod 的名称来检查 JupyterHub pod 的名称:kubectl get pods

然后使用kubectl describe pod hub-6c9cb48df8-k5t4w -n defaultwhich 给了我这个:

所以我知道豆荚是不健康的。但我没有任何其他细节来调试它。任何有关如何修复或调试此问题的帮助将不胜感激。

谢谢!