0

I am using Docker Desktop on windows 10. And I generate kubernetes NodePort Service to access from client web browser (http://10.110.201.24:30008/hello/praveen) but service is not accessible.

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

DockerFile

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"]

I have wrote simple web based spring boot application as below

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

application.properties

server.port=5000

I could see everything looks good in terms of Deployment, Pod and Services status. However I am not able to access the application.

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

I am guessing their could be different way of accessing ip in Docker Hub which I am not able figure it out! Could you please help. Appreciated !

Docker and k8s versions as below

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
Uday Kiran
  • 487
  • 2
  • 9
  • 29

1 Answers1

3

Your port setting is not straight.

You have port 80 in deployment yml, 5001 in DockerFile and 5000 in application properties. They should match.

Update

The other problem is that your Service doesn't have a selector. So the Service doesn't know to which pod the traffic should be routed.

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

The Deploment has to have a corresponding label.

metadata:
  name: my-app-v1
  labels:
    app: my-app
    version: v1
Chris
  • 5,109
  • 3
  • 19
  • 40
  • I have changed port to 5000 in application.propertier, Dockerfile and deployment.yaml. In addition I have updated ports in server.yml as below `spec: type: NodePort ports: - port: 5000 targetPort: 5000 nodePort: 30008` still I am not able to access the service : http://localhost:30008/hello/praveen – Uday Kiran May 13 '20 at 04:36
  • I see. The other problem is that your service isn't linked to the deployment. I updated my answer. – Chris May 13 '20 at 06:01
  • 1
    Thank You for your time. It worked as per my expectation :) Thank you once again! – Uday Kiran May 13 '20 at 14:48