我正在运行我的minikube作为docker镜像我正试图使用Nodeport向外界公开我的服务。
这是我的yaml文件。
apiVersion: apps/v1
kind: Deployment
metadata:
name: docker-hello-world
labels:
app: docker-hello-world
spec:
selector:
matchLabels:
app: docker-hello-world
replicas: 3
template:
metadata:
labels:
app: docker-hello-world
spec:
containers:
- name: docker-hello-world
image: scottsbaldwin/docker-hello-world:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: docker-hello-world-svc
spec:
selector:
app: docker-hello-world
ports:
- port: 8088
targetPort: 80
type: NodePort
搜索了很多关于nodePort的信息,我们需要节点ip来访问服务我可以使用minikube服务docker hello world svc--url访问我的服务,这为我提供了访问服务的urlhttp://127.0.0.1:52526
,但这里的端口号与nodePort不同。
我的服务运行成功。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
docker-hello-world-svc NodePort 10.109.146.181 <none> 8088:30934/TCP 65m
我想使用Nodeport从集群外部访问我的服务,但我的节点没有任何外部ip
kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
minikube Ready control-plane 5h9m v1.24.3 192.168.49.2 <none> Ubuntu 20.04.4 LTS 5.10.104-linuxkit docker://20.10.17
已经读到我需要ingress控制器来访问服务,但我想使用nodePort测试它。
有什么办法可以让我只使用运行在作为docker镜像运行的minikube内部的nodePort来访问我的服务?
minikube的状态不显示kubectl
>>minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
使用NodePort时不需要外部IP,可以使用minikube ip
获取minikube节点地址,然后连接到相应的nodePort
:
$ kubectl svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
docker-hello-world-svc NodePort 10.108.66.235 <none> 8088:31550/TCP 2m15s
$ minikube ip
192.168.49.2
$ curl 192.168.49.2:31550
<h1>Hello webhook world from: docker-hello-world-cc79bf486-k4lm8</h1>
另一种选择是使用LoadBalancer
服务,并使用minikube tunnel
使用内部端口连接到它:
$ kubectl svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
docker-hello-world-svc LoadBalancer 172.16.58.95 172.16.58.95 8088:32624/TCP 10s
$ curl 172.16.58.95:8088
<h1>Hello webhook world from: docker-hello-world-cc79bf486-dg5s9</h1>
注:
- 只有在单独的终端中运行
minikube tunnel
(这是一个前台进程(后,才能获得EXTERNAL-IP
- 我建议您使用不太常见的服务IP范围运行Minikube,以防止与其他网络路由发生冲突:
minikube start --service-cluster-ip-range=172.16.0.0/16
您可以使用kubeclt的端口转发。kubectl端口转发允许使用资源名称,例如pod名称,来选择要转发到的匹配pod。
kubectl port-forward svc/resource-name 4000:5000