无法使用 Desktop Docker 设置通过节点端口访问 Kubernetes 服务

2024-01-23

我在 Windows 10 上使用 Docker Desktop。我生成 kubernetes NodePort 服务以从客户端 Web 浏览器访问(http://10.110.201.24:30008/hello/praveen 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

service

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="[email protected] /cdn-cgi/l/email-protection"
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 Boot 应用程序,如下所示

@RestController
public class HelloController {
    @GetMapping( value = "hello/{input}")
    public String getMessage(@PathVariable String input){
        return "Hi "+input;
    }
}

应用程序属性

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。他们应该匹配。

Update

另一个问题是您的服务没有选择器。因此服务不知道流量应该路由到哪个 Pod。

spec:
  type: NodePort
  ports:
    - port: 5000
      targetPort: 5000
      nodePort: 30008
  selector:
    app: my-app

Deployment 必须有相应的标签。

metadata:
  name: my-app-v1
  labels:
    app: my-app
    version: v1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法使用 Desktop Docker 设置通过节点端口访问 Kubernetes 服务 的相关文章

随机推荐