我有一个在本地机器(我的 Mac)上的 Kubernetes 上运行的 pod,并且定义为可通过 nodePort 30036 访问
- protocol: TCP
targetPort: 8081
nodePort: 30036
我希望能够使用为 nodePort 使用定义的范围 (30000-32768) 之外的端口访问此节点。比如说 8080。我有什么选择?谢谢!
答案1
由于没有关于所使用的确切 Kubernetes 解决方案的信息,因此很难确定确切的解决方案。
假设有两个选项:
Docker Desktop with Kubernetes
Minikube
针对这些问题的一些解决方案可能是:
带有 Kubernetes 的 Docker Desktop
Service
类型LoadBalancer
您的 Kubernetes 集群可以使用Service
类型LoadBalancer
并链接到您的localhost
(您的 Mac localhost
)。
您可以通过运行以下示例来检查这一点:
$ kubectl create deployment nginx --image=nginx
$ kubectl expose deployment nginx --port=80 --type=LoadBalancer
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 10d
nginx LoadBalancer 10.111.214.48 localhost 80:30032/TCP 77s
curl 127.0.0.1:80
/curl kubernetes.docker.internal:80
<-- REDACTED -->
<title>Welcome to nginx!</title>
<-- REDACTED -->
附注!
--port
您可以在使用时使用(您的端口localhost
)和--targetPort
(您的监听端口Pod
)参数进一步修改它$ kubectl expose ...
更改NodePort
端口范围
您可以按照这个深入的答案,它将向您展示如何修改kubeapi-server
以更改NodePort
端口范围(通过登录到 Docker VM):
使用Ingress
控制器
您还可以使用一个Ingress
控制器,该控制器将绑定到您的 Mac localhost
,并允许您使用Ingress
资源(它主要用于HTTP
/,HTTPS
但经过一些调整,它可以传递TCP
/UDP
流量)。您可以在此处找到有关该主题的更多信息:
迷你库
由于使用不同Minikube
,可能会有很多变化--driver
。
更改NodePort
端口范围
您可以再次按照以下答案来更改minikube
NodePort
端口范围:
使用metallb
您还可以使用金属Service
为您的类型分配地址LoadBalancer
。
执行步骤如下:
$ minikube start --driver=hyperkit
$ minikube addons enable metallb
$ minikube node list
(注意你的 IP 地址minikube
)$ minikube addons configure metallb
(将分配的范围放在minikube
IP 附近,例如:minikube ip
:192.168.64.11
metallb start
:192.168.64.100
metallb end
:192.168.64.110
- 创建工作负载并将其公开为
Service
类型LoadBalancer
$ curl SVC_EXTERNAL_IP:PORT
附注!
--driver=hyperkit
之所以使用,是因为:因为您在 darwin 上使用 Docker 驱动程序,所以需要打开终端才能运行它。
minikube
此消息与使用时实例的访问及其限制有关--driver=docker
。您需要使用minikube service SERVICE_NAME
来访问Service
(并且您在使用时终端必须处于运行状态)。
附注!
我认为作为一种解决方法您也可以使用
$ kubectl port-forward
。
其他资源: