在任意端口公开 minikube 中的 LoadBalancer 服务?

Exposing LoadBalancer service in minikube at arbitrary port?

我有一个 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 本身?

请记住,Minikube 无法像其他云提供商那样提供真正的 loadbalancer,它只是通过使用简单的 nodePort Service 代替。

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

If you want a specific port number, you can specify a value in the nodePort field. The control plane will either allocate you that port or report that the API transaction failed. This means that you need to take care of possible port collisions yourself. You also have to use a valid port number, one that’s inside the range configured for NodePort use.

您的示例可能如下所示:

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

您还可以在启动 kube-apiserver.

时通过在 --service-node-port-range 标志后提供您的自定义值来更改此默认范围

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