首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >库伯奈特MetalLB外部IP不可达

库伯奈特MetalLB外部IP不可达
EN

Stack Overflow用户
提问于 2020-03-21 10:48:02
回答 3查看 6.8K关注 0票数 11

我无法访问由MetalLB负载均衡器分配的网络IP

我在k3s中创建了一个Kubernetes集群。它的1名主人和1名工人。每个人都有自己的私有IP。

192.168.0.13

工人192.168.0.13

我在k3s中安装了INSTALL_K3S_EXEC=" --no-deploy servicelb --no-deploy traefik"

现在,我正在尝试使用MetalLB和nginx部署一个应用程序。

代码语言:javascript
复制
  --set configInline.address-pools[0].name=default \
  --set configInline.address-pools[0].protocol=layer2 \
  --set configInline.address-pools[0].addresses[0]=192.168.0.21-192.168.0.30
代码语言:javascript
复制
helm install nginx-ingress stable/nginx-ingress --namespace kube-system \
    --set controller.image.repository=quay.io/kubernetes-ingress-controller/nginx-ingress-controller\
    --set controller.image.tag=0.30.0 \
    --set controller.image.runAsUser=33 \
    --set defaultBackend.enabled=false

我能看到每个吊舱都在运行

代码语言:javascript
复制
NAME                                             READY   STATUS    RESTARTS   AGE    IP             NODE             NOMINATED NODE   READINESS GATES
coredns-d798c9dd-lsdnp                           1/1     Running   5          37h    10.42.0.25     c271-k3s-ocrh    <none>           <none>
local-path-provisioner-58fb86bdfd-bcpl7          1/1     Running   5          37h    10.42.0.22     c271-k3s-ocrh    <none>           <none>
metrics-server-6d684c7b5-v9tmh                   1/1     Running   5          37h    10.42.0.24     c271-k3s-ocrh    <none>           <none>
metallb-speaker-4kbmw                            1/1     Running   0          4m7s   192.168.0.14   c271-k3s-agent   <none>           <none>
metallb-controller-75bf779d4f-nb47l              1/1     Running   0          4m7s   10.42.1.45     c271-k3s-agent   <none>           <none>
metallb-speaker-776p9                            1/1     Running   0          4m7s   192.168.0.13   c271-k3s-ocrh    <none>           <none>
nginx-ingress-default-backend-5b967cf596-554bq   1/1     Running   0          98s    10.42.1.46     c271-k3s-agent   <none>           <none>
nginx-ingress-controller-674675d5b6-blndp        1/1     Running   0          98s    10.42.1.47     c271-k3s-agent   <none>           <none>

应用程序获取IP 192.168.0.21

代码语言:javascript
复制
❯ kubectl get services  -n kube-system -l app=nginx-ingress -o wide
NAME                            TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)                      AGE    SELECTOR
nginx-ingress-default-backend   ClusterIP      10.43.170.195   <none>         80/TCP                       112s   app=nginx-ingress,component=default-backend,release=nginx-ingress
nginx-ingress-controller        LoadBalancer   10.43.220.166   192.168.0.21   80:31735/TCP,443:31566/TCP   111s   app=nginx-ingress,component=controller,release=nginx-ingress

我可以通过curl到nginx控制器pod从主人和工作人员那里访问这个应用程序。

代码语言:javascript
复制
HTTP/1.1 200 OK
Server: nginx/1.17.8
Date: Sat, 21 Mar 2020 10:43:34 GMT
Content-Type: text/html
Content-Length: 153
Connection: keep-alive

但是IP不能从本地192.168.0.21访问。

诊断: DHCP是打开的,192.168.0.21-192.168.0.30是绝对免费的。当我试图通过netplan配置分配192.168.0.21给主机或代理时,它们将获得IP。

请指点我,我错过了什么。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-09-22 10:43:05

两年来,我一直在我的家庭实验室使用metalLb,但是我没有得到这个错误(虽然我有其他错误,例如,MetalLB无法从池中分配一个IP地址)

我想与那些仍在互联网上挣扎的人们分享我目前的设置。

helm install --create-namespace metallb metallb/metallb -n metallb-system -f values.yaml

代码语言:javascript
复制
configInline:
  address-pools:
    - name: default
      protocol: layer2
      addresses:
        - 192.168.0.21/30
      # can use series like 192.168.0.21-24 too.

调试-尝试从名称空间metallb中的所有结束符中获取日志。

凯尔 -n金属

使用K8S与https://github.com/geerlingguy/ansible-role-kubernetes一起安装的https://github.com/geerlingguy/ansible-role-kubernetes

代码语言:javascript
复制
Client Version: version.Info{Major:"1", Minor:"24", GitVersion:"v1.24.1", GitCommit:"3ddd0f45aa91e2f30c70734b175631bec5b5825a", GitTreeState:"clean", BuildDate:"2022-05-24T12:17:11Z", GoVersion:"go1.18.2", Compiler:"gc", Platform:"darwin/amd64"}
Kustomize Version: v4.5.4
Server Version: version.Info{Major:"1", Minor:"24", GitVersion:"v1.24.3", GitCommit:"aef86a93758dc3cb2c658dd9657ab4ad4afc21cb", GitTreeState:"clean", BuildDate:"2022-07-13T14:23:26Z", GoVersion:"go1.18.3", Compiler:"gc", Platform:"linux/amd64"}

也许将externalTrafficPolicy切换到本地/集群可能有帮助,但我没有尝试。我的装置是从盒子里出来的。

祝好运。

票数 0
EN

Stack Overflow用户

发布于 2020-12-11 08:40:02

您需要确保源IP地址(由metallb分配的外部ip)被保留。为此,将入口-控制器服务规范的字段的值设置为Local。例如

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  name: my-app
  labels:
    helm.sh/chart: webapp-0.1.0
    app.kubernetes.io/name: webapp
    app.kubernetes.io/instance: my-app
    app.kubernetes.io/version: "1.16.0"
    app.kubernetes.io/managed-by: Helm
spec:
  type: ClusterIP
  ports:
    - port: 80
      targetPort: http
      protocol: TCP
      name: http
  selector:
    app.kubernetes.io/name: webapp
    app.kubernetes.io/instance: my-app
  externalTrafficPolicy: Local

externalTrafficPolicy字段的默认值是“群集”。因此,将其更改为本地

票数 5
EN

Stack Overflow用户

发布于 2022-04-28 12:56:43

在我使用纤毛和HAProxy入口控制器的设置中,我会将externalTrafficPolicyLocal改为Cluster

代码语言:javascript
复制
kubectl --namespace ingress-controller patch svc haproxy-ingress \
 -p '{"spec":{"externalTrafficPolicy":"Cluster"}}'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60786874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档