【问题标题】:Unable to get metallb working on my bare-metal cluster无法让 metallb 在我的裸机集群上工作
【发布时间】:2019-12-26 20:16:30
【问题描述】:

我有一个裸机集群,其中包含 3 台公开可用的服务器,但每台服务器的 IP 地址完全不同。我的 DNS 条目指向所有 3 台主机 - 因此任何主机都可以接收流量。我所有的都通过一个vlan连接。现在我希望将来自互联网的流量转发到运行服务的 k8s 节点:


browse "mysrv.mydomain.com"
             |
          .-~|~-.
  .- ~ ~-(   |   )_ _
 /           v         ~ -.
|            |              \
 \           |             .'
   ~- . _____|_______ . -~
             |
             |  request can go to any service
             |
             +----------->--------------+------------>-------------+
             v                          v                          v
             |                          |                          |
             |                          |                          |
  +---------------------+    +---------------------+    +---------------------+
  |        host01       |    |        host02       |    |        host03       |
  |      k8s master     |    |       k8s node      |    |       k8s node      |
  |                     |    |                     |    |                     |
  | Pub.Ip: x.x.x.x     |    | Pub.Ip: y.y.y.y     |    | Pub.Ip: z.z.z.z     |
  |                     |    |                     |    |                     |
  | VlanIp: 192.168.0.1 |----| VlanIp: 192.168.0.2 |----| VlanIp: 192.168.0.3 |
  +---------------------+    +---------------------+    +---------------------+

我知道我必须使用 metallb,因此我按照此处的设置说明进行操作:https://kubernetes.github.io/ingress-nginx/deploy/baremetal/#a-pure-software-solution-metallb。我可以成功部署 nginx 负载均衡器,但我不是用户如何配置 metallb。

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - x.x.x.x,y.y.y.y,z.z.z.z
    - name: internal
      protocol: layer2
      addresses:
      - 192.168.0.200-192.168.0.210

使用default 会导致nginx 服务永远不会获得外部IP

> kubectl get svc -n ingress-nginx ingress-nginx 
NAME            TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx   LoadBalancer   10.107.136.170   <pending>     80:30152/TCP,443:30276/TCP   43h

使用internal 有效,但仅当我连接到内部 vlan 时。

任何提示都会对我如何使我的场景有效。

【问题讨论】:

    标签: kubernetes metallb


    【解决方案1】:

    您的环境不适合 MetalLB - 您需要可以分配给任何节点的 IP(浮动 IP/服务 IP)。 对于您的情况,在 Kubernetes 中称为 Ingress 的反向代理将是更好的解决方案。

    【讨论】:

    • 所以你的意思是这里描述的解决方案? kubernetes.github.io/ingress-nginx/deploy/baremetal/…vlan呢?我可以通过让外部接口知道 vlan 网络来使用那个吗?
    • 对,你可以使用 nginx 或者 traefik 例如。据我了解,vlan 由内部 IP 组成,因此将其用作应该从外部访问的服务 IP 的池是没有用的。
    猜你喜欢
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 2020-08-05
    • 2018-08-04
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    相关资源
    最近更新 更多