4

我有一个裸机 kube 集群(PI Cluster)。它有一个简单的 hello world 网页跨节点拆分,并且运行良好。从那以后,我创建了一项服务,以使其在事物的公共方面公开,但该站点不会呈现。看来我没有收到要发布的公告。

我的 config.map 非常简单。

metadata:
  name: metallb
  namespace: metallb-system
  selfLink: /api/v1/namespaces/metallb-system/configmaps/metallb
  uid: 89d1e418-989a-4869-9da1-244409f8f700
  resourceVersion: '1086283'
  creationTimestamp: '2020-06-09T00:34:07Z'
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: >
      {"apiVersion":"v1","data":{"config":"address-pools:\n- name: default\n 
      protocol: layer2\n  addresses:\n  -
      192.168.1.16-192.168.1.31\n"},"kind":"ConfigMap","metadata":{"annotations":{},"name":"metallb","namespace":"metallb-system"}}
  managedFields:
    - manager: kubectl
      operation: Update
      apiVersion: v1
      time: '2020-06-09T00:34:07Z'
      fieldsType: FieldsV1
      fieldsV1:
        'f:data':
          .: {}
          'f:config': {}
        'f:metadata':
          'f:annotations':
            .: {}
            'f:kubectl.kubernetes.io/last-applied-configuration': {}
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 192.168.1.16-192.168.1.31
kind: ConfigMap

我的服务看起来不错:

testapp-service   LoadBalancer   10.107.213.151   192.168.1.16   8081:30470/TCP   7m40s

在主节点上,我可以 curl 192.168.1.16:8081 并获取我期望的数据。但是,如果我转到 192.168.1.0 网络上的任何其他机器,我根本无法渲染它。

我知道公共地址没有重叠。我的 DHCP 服务器屏蔽了 192.168.1.16-192.168.1.31 范围,因此该范围内没有任何内容。

那么如何让我的 master-001 节点宣布它正在处理 192.168.1.16 的流量?(它的唯一地址是 0.250,并且确实宣布了,但那不是服务,等等)。

我在 Raspberry PI 4s 上使用 Ubuntu 20。192 地址是事物的 wifi 端,10. 是事物的有线端。

谢谢,尼克

4

1 回答 1

4

在 Layer2 模式下,您给 metallb 的地址范围和节点 IP 必须在同一子网中。节点的 IP 地址是什么?

发往服务 IP (192.168.1.16) 的数据包必须首先到达集群节点的第 2 层域,以便数据包可以路由到处理服务 IP 的节点,这意味着节点 IP 也必须在 192.168.1.0 网络中。

如果只有主节点连接到公共网络,请尝试在扬声器守护程序集上添加 nodeAffinity,以便仅在这些节点上创建扬声器 pod。

于 2020-06-18T20:50:01.730 回答