[英]Can't access minikube service using NodePort from host on Mac
我正在嘗試在我的 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
從集群內部訪問它,但從集群外部,它不會連接。 這些是我的服務和部署清單:
網絡測試服務.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
網絡測試部署.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: {}
有人知道我做錯了什么嗎? 或者也許我可以嘗試進一步診斷問題? 我允許嘗試部署入口,但這也不起作用。
這似乎與您啟動 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
您可以使用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
以防萬一您還沒有偶然發現更廣泛的訪問節點端口服務的概念,該服務通常適用於專有的 minikube 構造:
$k get service -A NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP
默認 nginx LoadBalancer 10.43.228.207 172.22.0.240 80:30467/TCP 11h
$ kubectl 端口轉發 --address 0.0.0.0 服務/nginx 8082:80
然后從我網絡上的另一台主機上,我這樣做: curl [運行 minikube 的主機]:8082
從 0.0.0.0:8082 轉發 -> 80 處理 8082 的連接
然后你也可以從不同的主機連接。
與 minikube 相比, Mac and Windows
的 docker docker-desktop UI
提供了一種更簡單的替代方案,您只需在 docker-desktop UI 上激活 Kubernetes 功能即可:
設置完成后,您可以右鍵單擊 docker 桌面圖標 > Kubernetes
現在驗證您的部署/服務是否正常工作:
kubectl apply -f /file.yaml
對於端口,我們應該牢記一個檢查點。
目標端口:80
屬於我們在(Dockerfile 或 Docker-compose 文件)中公開的端口。 如果端口不匹配,您將無法訪問它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.