我是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上可用。
查看一个类似的案例,并参考此链接获取更多信息。