7

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

我在 Contabo 中创建了一个 Kubernetes 集群。它的1个主人和2个工人。每个人都有自己的公共 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

它有效,豆荚正在运行。我在之后看到了外部 IP 地址:

kubectl get services

在此处输入图像描述 从每个节点/主机我可以curl到那个ip和端口,我可以得到nginx的:

<h1>Welcome to nginx!</h1>

到目前为止,一切都很好。但:

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

我错过了什么?

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

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

谢谢。

4

2 回答 2

3

您缺少的是路由策略

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

于 2019-07-19T10:21:42.133 回答
3

我的硬件布局完全相同:

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

目标:通过metalLB“暴露”nginx,这样我就可以通过浏览器通过我的一个VPS的IP从集群外部访问我的网络应用程序

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

完成的步骤:

  1. 为负载均衡器创建一个 .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

  • 添加配置映射:

    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

于 2021-09-15T23:02:03.120 回答