无法从Mac上的主机使用NodePort访问minikube服务

时间:2020-08-26 14:58:48

标签: docker kubernetes minikube

我试图在Mac上将单个Web应用程序部署到Minikube,然后在浏览器中访问它。我正在尝试使用最简单的设置,但是它不起作用,我只收到“连接被拒绝”错误,我不知道为什么。

这是我正在尝试的:

$ minikube start --insecure-registry=docker.example.com:5000
?  minikube v1.12.3 on Darwin 10.14.6
✨  Using the docker driver based on existing profile
?  Starting control plane node minikube in cluster minikube
?  Restarting existing docker container for "minikube" ...
?  Preparing Kubernetes v1.18.3 on Docker 19.03.8 ...
?  Verifying Kubernetes components...
?  Enabled addons: default-storageclass, storage-provisioner
?  Done! kubectl is now configured to use "minikube"

$ eval $(minikube -p minikube docker-env)

$ docker build -t web-test .
Sending build context to Docker daemon  16.66MB
Step 1/3 : FROM docker.example.com/library/openjdk:11-jdk-slim
11-jdk-slim: Pulling from library/openjdk
bf5952930446: Pull complete 
092c9b8e633f: Pull complete 
0b793152b850: Pull complete 
7900923f09cb: Pull complete 
Digest: sha256:b5d8f95b23481a9d9d7e73c108368de74abb9833c3fae80e6bdfa750663d1b97
Status: Downloaded newer image for docker.example.com/library/openjdk:11-jdk-slim
 ---> de8b1b4806af
Step 2/3 : COPY target/web-test-0.0.1-SNAPSHOT.jar app.jar
 ---> 6838e3db240a
Step 3/3 : ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]
 ---> Running in 550bf762bf2d
Removing intermediate container 550bf762bf2d
 ---> ce1468d1ff10
Successfully built ce1468d1ff10
Successfully tagged web-test:latest

$ kubectl apply -f web-test-service.yaml 
service/web-test unchanged

$ kubectl apply -f web-test-deployment.yaml 
deployment.apps/web-test configured

$ kubectl get po -o wide
NAME                        READY   STATUS    RESTARTS   AGE   IP           NODE       NOMINATED NODE   READINESS GATES
web-test-6bb45ffc54-8mxbc   1/1     Running   0          16m   172.18.0.2   minikube   <none>           <none>

$ kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP          16m
web-test     NodePort    10.102.19.201   <none>        8080:31317/TCP   16m

$ minikube ip
127.0.0.1

$ curl http://127.0.0.1:31317
curl: (7) Failed to connect to 127.0.0.1 port 31317: Connection refused


$ kubectl logs web-test-6bb45ffc54-8mxbc

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.3.3.RELEASE)

2020-08-26 14:45:32.692  INFO 1 --- [           main] com.example.web.WebTestApplication           : Starting WebTestApplication v0.0.1-SNAPSHOT on web-test-6bb45ffc54-8mxbc with PID 1 (/app.jar started by root in /)
2020-08-26 14:45:32.695  INFO 1 --- [           main] com.example.web.WebTestApplication           : No active profile set, falling back to default profiles: default
2020-08-26 14:45:34.041  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer      : Tomcat initialized with port(s): 8080 (http)
2020-08-26 14:45:34.053  INFO 1 --- [           main] o.apache.catalina.core.StandardService       : Starting service [Tomcat]
2020-08-26 14:45:34.053  INFO 1 --- [           main] org.apache.catalina.core.StandardEngine      : Starting Servlet engine: [Apache Tomcat/9.0.37]
2020-08-26 14:45:34.135  INFO 1 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]           : Initializing Spring embedded WebApplicationContext
2020-08-26 14:45:34.135  INFO 1 --- [           main] w.s.c.ServletWebServerApplicationContext     : Root WebApplicationContext: initialization completed in 1355 ms
2020-08-26 14:45:34.587  INFO 1 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor      : Initializing ExecutorService 'applicationTaskExecutor'
2020-08-26 14:45:34.797  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer      : Tomcat started on port(s): 8080 (http) with context path ''
2020-08-26 14:45:34.810  INFO 1 --- [           main] com.example.web.WebTestApplication           : Started WebTestApplication in 2.808 seconds (JVM running for 3.426)


$ minikube ssh
docker@minikube:~$ curl 10.102.19.201:8080
Up and Running
docker@minikube:~$

如您所见,Web应用程序已启动并正在运行,我可以通过执行minikube ssh从群集内部访问它,但是无法从群集外部进行连接。这些是我的服务和部署清单:

web-test-service.yaml:

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

web-test-deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: web-test
  name: web-test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web-test
  strategy: {}
  template:
    metadata:
      labels:
        app: web-test
    spec:
      containers:
      - image: web-test
        imagePullPolicy: Never
        name: web-test
        ports:
        - containerPort: 8080
      restartPolicy: Always
status: {}

有人知道我在做什么错吗?或者,也许我该如何尝试进一步诊断问题?我允许尝试部署一个入口,但这也不起作用。

3 个答案:

答案 0 :(得分:3)

使用minikube ip返回127.0.0.1时,您几乎要面对this issue。如果您使用kubectl get node -o wide而不是127.0.0.1的内部ip,它应该可以工作。

从官方参考文献docs出发,一种更容易的方法是您可以使用minikube service web-test --url获取该网址并在浏览器中使用,如果您使用minikube service web-test,它将直接在浏览器中打开该网址

您的部署Yaml和其他所有东西看起来都不错,并且希望在部署到远程集群时不会有任何问题。

答案 1 :(得分:1)

您可以使用minikube service web-test

从minikube导出服务

https://kubernetes.io/docs/tutorials/hello-minikube/#create-a-service

编辑:

如果有部署,则可以使用以下kubectl命令导出该部署。

minikube kubectl -- expose deployment your-deployment --port 80 --type=LoadBalancer

答案 2 :(得分:0)

似乎与启动minikube时使用的默认docker驱动程序有关。为避免这些问题,您可以强制使用特定的驱动程序(例如“ virtualbox”)。为此,请按照以下步骤操作:

使用以下方法删除旧的minikube:

minikube delete

使用virtualbox驱动程序启动minikube:

minikube start --memory=4096 --driver=virtualbox

运行minikube ip。您会看到类似192.168.99.100的输出。 然后,再次创建Pod和服务,它应该可以正常工作。 我已在以下问题中找到此信息:https://github.com/kubernetes/minikube/issues/7344#issuecomment-703225254