我有一个裸机群集,其中包含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

只有当我连接到内部VLAN时,才可以使用internal

关于如何使我的方案工作的任何提示都是有用的。

最佳答案

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

关于kubernetes - 无法让Metallb在我的裸机集群上工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57593526/

10-11 06:44