使用 Desktop Docker 设置无法通过节点端口访问 Kubernetes 服务
Kubernetes services are not accessible through nodeport with Desktop Docker setup
我在 windows 10 上使用 Docker 桌面。我生成了 kubernetes NodePort 服务以从客户端 Web 浏览器访问 (http://10.110.201.24:30008/hello/praveen),但无法访问该服务。
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
selector:
matchLabels:
run: spring-app
replicas: 1
template:
metadata:
labels:
run: spring-app
spec:
containers:
- name: spring-boot
image: praveen1233/spring-boot:v1
ports:
- containerPort: 80
服务
apiVersion: v1
kind: Service
metadata:
name: service
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 30008
Docker文件
FROM openjdk:8u212-jdk-slim
LABEL maintainer="praveen.ambati33@gmail.com"
VOLUME /tmp
EXPOSE 5001
ARG JAR_FILE=target/spring-boot-app.jar
ADD ${JAR_FILE} spring-boot-app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/spring-boot-app.jar"]
我已经编写了简单的基于 Web 的 spring 引导应用程序,如下所示
@RestController
public class HelloController {
@GetMapping( value = "hello/{input}")
public String getMessage(@PathVariable String input){
return "Hi "+input;
}
}
application.properties
server.port=5000
我可以看到就部署、Pod 和服务状态而言,一切看起来都很好。但是我无法访问该应用程序。
kubectl get all
NAME READY STATUS RESTARTS AGE
pod/my-app-7b77675f79-wwbfl 1/1 Running 0 32m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 6d1h
service/service NodePort 10.110.201.24 <none> 80:30008/TCP 23m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/my-app 1/1 1 1 32m
NAME DESIRED CURRENT READY AGE
replicaset.apps/my-app-7b77675f79 1 1 1 32m
我猜他们在 Docker Hub 中访问 ip 的方式可能不同,我无法弄清楚!能否请你帮忙。赞赏!
Docker 和 k8s 版本如下
Client: Docker Engine - Community
Version: 19.03.8
API version: 1.40
Go version: go1.12.17
Git commit: afacb8b
Built: Wed Mar 11 01:23:10 2020
OS/Arch: windows/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.8
API version: 1.40 (minimum version 1.12)
Go version: go1.12.17
Git commit: afacb8b
Built: Wed Mar 11 01:29:16 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.2.13
GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
你的端口设置不直
部署 yml 中有端口 80,DockerFile 中有端口 5001,应用程序属性中有 5000。他们应该匹配。
更新
另一个问题是您的服务没有选择器。所以 Service 不知道应该将流量路由到哪个 pod。
spec:
type: NodePort
ports:
- port: 5000
targetPort: 5000
nodePort: 30008
selector:
app: my-app
Deploment 必须有相应的标签。
metadata:
name: my-app-v1
labels:
app: my-app
version: v1
我在 windows 10 上使用 Docker 桌面。我生成了 kubernetes NodePort 服务以从客户端 Web 浏览器访问 (http://10.110.201.24:30008/hello/praveen),但无法访问该服务。
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
selector:
matchLabels:
run: spring-app
replicas: 1
template:
metadata:
labels:
run: spring-app
spec:
containers:
- name: spring-boot
image: praveen1233/spring-boot:v1
ports:
- containerPort: 80
服务
apiVersion: v1
kind: Service
metadata:
name: service
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 30008
Docker文件
FROM openjdk:8u212-jdk-slim
LABEL maintainer="praveen.ambati33@gmail.com"
VOLUME /tmp
EXPOSE 5001
ARG JAR_FILE=target/spring-boot-app.jar
ADD ${JAR_FILE} spring-boot-app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/spring-boot-app.jar"]
我已经编写了简单的基于 Web 的 spring 引导应用程序,如下所示
@RestController
public class HelloController {
@GetMapping( value = "hello/{input}")
public String getMessage(@PathVariable String input){
return "Hi "+input;
}
}
application.properties
server.port=5000
我可以看到就部署、Pod 和服务状态而言,一切看起来都很好。但是我无法访问该应用程序。
kubectl get all
NAME READY STATUS RESTARTS AGE
pod/my-app-7b77675f79-wwbfl 1/1 Running 0 32m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 6d1h
service/service NodePort 10.110.201.24 <none> 80:30008/TCP 23m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/my-app 1/1 1 1 32m
NAME DESIRED CURRENT READY AGE
replicaset.apps/my-app-7b77675f79 1 1 1 32m
我猜他们在 Docker Hub 中访问 ip 的方式可能不同,我无法弄清楚!能否请你帮忙。赞赏!
Docker 和 k8s 版本如下
Client: Docker Engine - Community
Version: 19.03.8
API version: 1.40
Go version: go1.12.17
Git commit: afacb8b
Built: Wed Mar 11 01:23:10 2020
OS/Arch: windows/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.8
API version: 1.40 (minimum version 1.12)
Go version: go1.12.17
Git commit: afacb8b
Built: Wed Mar 11 01:29:16 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.2.13
GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
你的端口设置不直
部署 yml 中有端口 80,DockerFile 中有端口 5001,应用程序属性中有 5000。他们应该匹配。
更新
另一个问题是您的服务没有选择器。所以 Service 不知道应该将流量路由到哪个 pod。
spec:
type: NodePort
ports:
- port: 5000
targetPort: 5000
nodePort: 30008
selector:
app: my-app
Deploment 必须有相应的标签。
metadata:
name: my-app-v1
labels:
app: my-app
version: v1