我试图在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: {}
有人知道我在做什么错吗?或者,也许我该如何尝试进一步诊断问题?我允许尝试部署一个入口,但这也不起作用。
答案 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
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