Kubernetes / Metallb 单入口点

Kubernetes / Metallb single entrypoint

我正在为学校项目构建 K8 集群。 它是裸机,使用 metallb 作为负载均衡器。 每个服务都在一个单独的 pod 中工作:

在 phpmyadmin 文件中,我需要 link 我的 mysql 服务器用这样的东西:

$cfg['Servers'][$i]['host'] = "mysql-server-name";

我试过使用节点的IP:

kubectl get node -o=custom-columns='DATA:status.addresses[0].address' | sed -n 2p

添加端口 :3306 但我意识到 none 我的服务可以使用这种方法通过浏览器访问。 例如,节点的 Ip:5050 应该将我重定向到我的 wordpress,但它没有。 有没有办法获得一个 IP,我可以用它来让我的 pods 在它们之间进行通信? 我必须补充一点,当我使用 svc IP 而不是节点时,每个服务都可以正常工作。

这是我用于 metallb 的配置图:

kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 192.168.99.100-192.168.99.200

节点 IP 不会将您的应用程序暴露给其他应用程序的原因是 kubernetes 集群中的 pods 默认情况下不监听到达节点的请求。换句话说,pod上的端口没有连接到节点上的端口。
service 资源是建立连接所需的资源。
服务有不同的类型。 cluster IP 类型的服务会将集群内部的 IP 分配给应用程序。如果您不想直接从 Internet 访问您的 mysql 数据库,这就是您想要的。
这是您项目的集群 IP 类型的示例服务。

apiVersion: v1
kind: Service
metadata:
  name: mysql-service
  namespace: metallb-system
spec:
  selector:
    app: Mysql
  ports:
    - protocol: TCP
      port: 80
      targetPort: 3306

Selector 选择带有标签 app=mysql.
的 pods Port 是服务将监听的端口。
TargetPort 是 mysql 正在监听的端口。
当你创建服务时,你可以通过运行这个命令

找到它的IP
kubectl get services -n metallb-system

在 CLUSTER-IP 列下,记下您创建的服务的 IP。
所以在这种情况下,如果 mysql 正在监听 3306,您可以通过此服务在端口 80 上的服务 IP 上访问它。
如果您想将您的 wordpress 应用程序公开到互联网,请使用 NodePortLoadBalancer 服务类型。 Here为服务类型参考。