【问题标题】:Kubernetes services are not accessible through nodeport with Desktop Docker setupKubernetes 服务无法通过具有桌面 Docker 设置的节点端口访问
【发布时间】:2020-05-12 21:23:20
【问题描述】:

我在 Windows 10 上使用 Docker Desktop。我生成了 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 Boot 应用程序,如下所示

@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

【问题讨论】:

    标签: docker kubernetes docker-desktop kubernetes-service


    【解决方案1】:

    您的端口设置不正确。

    部署 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
    

    【讨论】:

    • 我在application.propertier、Dockerfile和deployment.yaml中将端口改为5000。此外,我已经更新了 server.yml 中的端口,如下spec: type: NodePort ports: - port: 5000 targetPort: 5000 nodePort: 30008 仍然无法访问该服务:localhost:30008/hello/praveen
    • 我明白了。另一个问题是您的服务未链接到部署。我更新了我的答案。
    • 感谢您的宝贵时间。它按我的预期工作:) 再次感谢您!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    • 2020-07-15
    • 2017-05-19
    • 1970-01-01
    • 2018-02-27
    • 2020-09-02
    • 1970-01-01
    相关资源
    最近更新 更多