spring-bootdockerkuberneteskubernetes-helmkind

URL of the pod deployed in Kind cluster is not working


test-dev-control-plane Ready control-plane 2d23h v1.27.3 172.18.0.3 Debian GNU/Linux 11 (bullseye) 5.15.133.1-microsoft-standard-WSL2 containerd://1.7.1

test-dev-worker Ready 2d23h v1.27.3 172.18.0.5 Debian GNU/Linux 11 (bullseye) 5.15.133.1-microsoft-standard-WSL2 containerd://1.7.1

test-dev-worker2 Ready 2d23h v1.27.3 172.18.0.2 Debian GNU/Linux 11 (bullseye) 5.15.133.1-microsoft-standard-WSL2 containerd://1.7.1

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

emp1-chart NodePort 10.96.181.143 31234:30296/TCP 2d19h kubernetes ClusterIP 10.96.0.1 443/TCP 2d23h

NAME READY STATUS RESTARTS AGE

abc 1/1 Running 1 (6m20s ago) 2d19h

http://172.18.0.2:31234/employee

http://172.18.0.3:31234/employee

http://172.18.0.5:31234/employee

I can see the image in the node using the commands:

It lists the image:

localhost:5001/employee1 latest f784fbf148a06 532MB

helm chart values.yml:

replicaCount: 1
image:
  repository: localhost:5001/employee1
  pullPolicy: IfNotPresent
  # Overrides the image tag whose default is the chart appVersion.
  tag: "latest"
imagePullSecrets: []
nameOverride: ""
fullnameOverride: ""
serviceAccount:
  # Specifies whether a service account should be created
  create: true
  # Automatically mount a ServiceAccount's API credentials?
  automount: true
  # Annotations to add to the service account
  annotations: {}
  # The name of the service account to use.
  # If not set and create is true, a name is generated using the fullname template
  name: ""
podAnnotations: {}
podLabels: {}
podSecurityContext: {}
  # fsGroup: 2000
securityContext: {}
  # capabilities:
  #   drop:
  #   - ALL
  # readOnlyRootFilesystem: true
  # runAsNonRoot: true
  # runAsUser: 1000
service:
  type: NodePort
  port: 31234
ingress:
  enabled: false
  className: ""
  annotations: {}
    # kubernetes.io/ingress.class: nginx
    # kubernetes.io/tls-acme: "true"
  hosts:
    - host: chart-example.local
      paths:
        - path: /
          pathType: ImplementationSpecific
  tls: []
  #  - secretName: chart-example-tls
  #    hosts:
  #      - chart-example.local
resources: {}
  # We usually recommend not to specify default resources and to leave this as a conscious
  # choice for the user. This also increases chances charts run on environments with little
  # resources, such as Minikube. If you do want to specify resources, uncomment the following
  # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
  # limits:
  #   cpu: 100m
  #   memory: 128Mi
  # requests:
  #   cpu: 100m
  #   memory: 128Mi
autoscaling:
  enabled: false
  minReplicas: 1
  maxReplicas: 100
  targetCPUUtilizationPercentage: 80
  # targetMemoryUtilizationPercentage: 80
# Additional volumes on the output Deployment definition.
volumes: []
# - name: foo
#   secret:
#     secretName: mysecret
#     optional: false
# Additional volumeMounts on the output Deployment definition.
volumeMounts: []
# - name: foo
#   mountPath: "/etc/foo"
#   readOnly: true
nodeSelector: {}
tolerations: []
affinity: {}

Solution

  • This worked for me :)

    kubectl port-forward <pod-name> <local-port>:<remote-port>
    kubectl port-forward pods/abc 31234:8085
    

    Where abc is my pod name, 31234 is the NodePort defined in helm chart values.yml which maps to the container port in my deployment.yml and 8085 is the port defined as server port in my spring boot rest api app.

    Once I did that, I could see this as output:

    Forwarding from 127.0.0.1:31234 -> 8085
    Forwarding from [::1]:31234 -> 8085
    Handling connection for 31234
    Handling connection for 31234
    

    Then I ran my app using http://localhost:31234/employee This gave me the results I was looking for :)