MetalLB 外部 IP 到 Internet

MetalLB External IP to Internet

我无法访问 public MetalLB 负载均衡器分配的 IP

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

我是用 kubeadm + flannel 做的。后来我确实安装了 MetalLB 来使用负载平衡。

我使用这个清单来安装 nginx:

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1
        ports:
        - name: http
          containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  ports:
  - name: http
    port: 8080
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer

有效,pods 是 运行。我在之后看到外部 IP 地址:

kubectl get services

从每个 node/host 我可以卷曲到那个 ip 和端口,我可以获得 nginx 的:

<h1>Welcome to nginx!</h1>

到目前为止,还不错。但是:

我仍然想念的是从我的计算机访问该服务 (nginx)。 我可以尝试通过 IP:PORT 访问每个节点(master + 2 slaves),但没有任何反应。最终目标是拥有一个可以访问该服务的域,但我猜不出我应该使用 IP。

我错过了什么?

MetalLB 应该公开我的 3 个可能的 IP 吗? 我应该在每台服务器上添加其他东西作为反向代理吗?

我在这里问这个问题是因为 baremetal/VPS 上的所有 articles/tutorials(非 aws、GKE 等)都在本地主机上的 kube 上执行此操作而错过了这个基本问题。

谢谢。

你缺少的是路由策略

您的外部 IP 地址必须与节点属于同一网络,或者您可以在默认网关级别添加到外部地址的路由,并为每个地址使用静态 NAT

我有完全相同的硬件布局:

  • 一个 3 节点 Kubernetes 集群 - 这里有 3 个 IP: | 123.223.149.27 | 22.36.211.68 | 192.77.11.164 |
  • 运行 在(不同的)VPS-Providers 上(当然连接到 运行 集群(通过 JOIN)

目标:通过 metalLB“公开”nginx,这样我就可以通过浏览器通过我的 VPS'[= 之一的 IP 从集群外部访问我的网络应用程序67=]

问题:我没有 “IP 范围” 我可以为 metallb

申报

完成的步骤:

  1. 为 Loadbalancer 创建一个 .yaml 文件,kindservicetypeloadbalancer.yaml
  2. 为ConfigMap创建一个.yaml文件,包含3个节点的IP,kindconfigmap.yaml

``

### start of the kindservicetypeloadbalancer.yaml
### for ensuring a unique name: loadbalancer name nginxloady

apiVersion: v1
kind: Service
metadata:
  name: nginxloady
  annotations:
    metallb.universe.tf/address-pool: production-public-ips
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer

``

下面,要添加到集群的第二个 .yaml 文件:

    # start of the kindconfigmap.yaml
    ## info: the "production-public-ips" can be found 
    ## within the annotations-sector of the kind: Service type: loadbalancer / the kindservicetypeloadbalancer.yaml 
    ## as well... ...namespace: metallb-system & protocol: layer2 
    ## note: as you can see, I added a /32 after every of my node-IPs

 
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: production-public-ips
      protocol: layer2
      addresses:
      - 123.223.149.27/32
      - 22.36.211.68/32
      - 192.77.11.164/32 

``

  • 添加负载均衡器:

    kubectl apply -f kindservicetypeloadbalancer.yaml

  • 添加 ConfigMap:

    kubectl apply -f kindconfigmap.yaml

  • 检查命名空间(“n”)metallb-system 的状态:

    kubectl describe pods -n metallb-system

PS: 实际上它就在那里: https://metallb.universe.tf/installation/

这里: https://metallb.universe.tf/usage/#requesting-specific-ips