Minikube没有外部ipad



我正在运行我的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

相关内容

  • 没有找到相关文章

最新更新