Kubernetes - Minkube使用随机端口号暴露Nodeport



我是kuberate和minikube的新手,我试图使用NodePort类型的服务来访问主机浏览器中的pod, minikube忽略了服务yaml文件中指定的端口,而minikube随机暴露了一个新的端口号。

这是我的配置

apiVersion: v1
kind: Service
metadata:
name: test
spec:
type: NodePort
selector:
app: test
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30036 ==> here is port
如您所见,指定的端口是30036,这是我在描述服务 时得到的结果。
kubectl describe services test
-----------------------------------
Name:                     test
Namespace:                default
Labels:                   <none>
Annotations:              <none>
Selector:                 app=test
Type:                     NodePort
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       10.104.58.44
IPs:                      10.104.58.44
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  30036/TCP
Endpoints:                192.168.50.2:80
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

但是当尝试运行minikube服务——url时,我得到了一个不同的端口号,我认为它是随机生成的

minikube service test --url
------------------------------
* Starting tunnel for service test.
|-----------|------------|-------------|------------------------|
| NAMESPACE |    NAME    | TARGET PORT |          URL           |
|-----------|------------|-------------|------------------------|
| default   | test       |             | http://127.0.0.1:56758 |
|-----------|------------|-------------|------------------------|
http://127.0.0.1:56758

,下面是

的输出
kubectl get svc -A
-------------------------
NAMESPACE     NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                  AGE
default       test         NodePort    10.104.58.44   <none>        80:30036/TCP             4h4m
default       kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP                  3d1h
kube-system   kube-dns     ClusterIP   10.96.0.10     <none>        53/UDP,53/TCP,9153/TCP   3d1h

如何让minikube使用指定的端口"30036"而不是随机生成新的

根据文档:

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

请注意,此服务可见为<NodeIP>:spec.ports[*].nodePort.spec.clusterIP:spec.ports[*].port。如果设置了kube-proxy的--nodeport-addresses标志或在kube-proxy配置文件中设置了相应的字段,则会过滤<NodeIP>节点IP。

以这种方式启动minikube:

minikube start --extra-config=apiserver.service-node-port-range=80-30036,端口80也可以使用:

apiVersion: v1
kind: Service
metadata:
name: test
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 80
protocol: TCP
selector:
app: test

minikube service test --url现在像预期的那样返回http://192.168.99.100:80,并且应用程序在端口80上可用。

查看一个类似的案例,并参考此链接获取更多信息。

相关内容

  • 没有找到相关文章

最新更新