首页 > 解决方案 > 在任意端口的 minikube 中公开 LoadBalancer 服务?

问题描述

我有一个 minikube 集群,在一个部署中运行 WordPress,在另一个部署中运行 MySQL。两种部署都有相应的服务。WordPress 服务的定义如下所示:

apiVersion: v1
kind: Service
metadata:
    name: wordpress
spec: 
    selector:
        app: wordpress
    ports:
        - port: 80 
    type: LoadBalancer

该服务运行良好,并minikube service为我提供了一个不错的路径,地址为minikube ip和随机高端口。问题是WordPress 需要站点名称中的完整 URL。我宁愿不要每次都更改它并为集群设置本地 DNS 名称。

有没有办法在 minikube 的任意端口上公开 LoadBalancer?我对任何端口都可以,只要它的端口由我决定,而不是 minikube 本身?

标签: kubernetesload-balancingkubernetes-ingressminikubekubernetes-service

解决方案


请记住,Minikube无法像其他云提供商那样提供真正的负载均衡器,它只是通过使用 simple来模拟它。nodePort Service

您可以完全控制所使用的端口。首先,您可以在nodePort Service规范中手动指定它(记住它应该在默认范围内:30000-32767):

如果您想要一个特定的端口号,您可以在该 nodePort字段中指定一个值。控制平面将为您分配该端口或报告 API 事务失败。这意味着您需要自己处理可能的端口冲突。您还必须使用一个有效的端口号,该端口号在为 NodePort 使用而配置的范围内。

您的示例可能如下所示:

apiVersion: v1
kind: Service
metadata:
    name: wordpress
spec: 
    selector:
        app: wordpress
    ports:
        - port: 80
          targetPort: 80
          nodePort: 30000
    type: NodePort

您还可以通过--service-node-port-range在启动kube-apiserver.

当您使用kukbeadm工具设置的kubernetes 集群时(Minikube也将其用作默认引导程序),您需要编辑文件并提供所需的标志以及您的自定义端口范围。/etc/kubernetes/manifests/kube-apiserver.yaml


推荐阅读