kubernetes / minikube

Run Kubernetes locally
https://minikube.sigs.k8s.io/
Apache License 2.0
29.35k stars 4.88k forks source link

Kubernetes Issue in Spring Boot Microservices java.net.SocketTimeoutException: connect timed out #15679

Closed Rapter1990 closed 1 year ago

Rapter1990 commented 1 year ago

What Happened?

I have a problem about running Spring Boot Microservices on Kubernetes. After I installed minikube, I started it and open its dashboard.

Here is the commands to open dashboards.

    1 ) minikube start
    2 ) minikube dashboard 

Next, I run all services through this command.

kubectl apply -f k8s

After waiting for a certain amount of time, I got this issue shown below.

    15:22:37.395 [main] ERROR org.springframework.boot.SpringApplication - Application run failed
    org.springframework.cloud.config.client.ConfigClientFailFastException: Could not locate PropertySource and the resource is not optional, failing
     at org.springframework.cloud.config.client.ConfigServerConfigDataLoader.doLoad(ConfigServerConfigDataLoader.java:197)
     at org.springframework.cloud.config.client.ConfigServerConfigDataLoader.load(ConfigServerConfigDataLoader.java:102)
     at org.springframework.cloud.config.client.ConfigServerConfigDataLoader.load(ConfigServerConfigDataLoader.java:61)
     at org.springframework.boot.context.config.ConfigDataLoaders.load(ConfigDataLoaders.java:107)
     at org.springframework.boot.context.config.ConfigDataImporter.load(ConfigDataImporter.java:128)
     at org.springframework.boot.context.config.ConfigDataImporter.resolveAndLoad(ConfigDataImporter.java:86)
     at org.springframework.boot.context.config.ConfigDataEnvironmentContributors.withProcessedImports(ConfigDataEnvironmentContributors.java:116)
     at org.springframework.boot.context.config.ConfigDataEnvironment.processWithProfiles(ConfigDataEnvironment.java:311)
     at org.springframework.boot.context.config.ConfigDataEnvironment.processAndApply(ConfigDataEnvironment.java:232)
     at org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor.postProcessEnvironment(ConfigDataEnvironmentPostProcessor.java:102)
     at org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor.postProcessEnvironment(ConfigDataEnvironmentPostProcessor.java:94)
     at org.springframework.boot.env.EnvironmentPostProcessorApplicationListener.onApplicationEnvironmentPreparedEvent(EnvironmentPostProcessorApplicationListener.java:102)
     at org.springframework.boot.env.EnvironmentPostProcessorApplicationListener.onApplicationEvent(EnvironmentPostProcessorApplicationListener.java:87)
     at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176)
     at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169)
     at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143)
     at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:131)
     at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:85)
     at org.springframework.boot.SpringApplicationRunListeners.lambda$environmentPrepared$2(SpringApplicationRunListeners.java:66)
     at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)
     at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:120)
     at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:114)
     at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:65)
     at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:344)
     at org.springframework.boot.SpringApplication.run(SpringApplication.java:302)
     at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306)
     at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295)
     at com.microservice.orderservice.OrderServiceApplication.main(OrderServiceApplication.java:15)
     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
     at java.base/java.lang.reflect.Method.invoke(Method.java:566)
     at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
     at org.springframework.boot.loader.Launcher.launch(Launcher.java:108)
     at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
     at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:65)
    Caused by: org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://config-server-svc:9296/ORDER-SERVICE/default": connect timed out; nested exception is java.net.SocketTimeoutException: connect timed out
     at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:785)
     at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:711)
     at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:602)
     at org.springframework.cloud.config.client.ConfigServerConfigDataLoader.getRemoteEnvironment(ConfigServerConfigDataLoader.java:303)
     at org.springframework.cloud.config.client.ConfigServerConfigDataLoader.doLoad(ConfigServerConfigDataLoader.java:118)
     ... 35 common frames omitted
    Caused by: java.net.SocketTimeoutException: connect timed out
     at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
     at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:412)
     at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:255)
     at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:237)
     at java.base/java.net.Socket.connect(Socket.java:609)
     at java.base/sun.net.NetworkClient.doConnect(NetworkClient.java:177)
     at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:508)
     at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:603)
     at java.base/sun.net.www.http.HttpClient.<init>(HttpClient.java:276)
     at java.base/sun.net.www.http.HttpClient.New(HttpClient.java:375)
     at java.base/sun.net.www.http.HttpClient.New(HttpClient.java:396)
     at java.base/sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1253)
     at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1187)
     at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1081)
     at java.base/sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:1015)
     at org.springframework.http.client.SimpleBufferingClientHttpRequest.executeInternal(SimpleBufferingClientHttpRequest.java:76)
     at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48)
     at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:66)
     at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:776)
     ... 39 common frames omitted

Here is my deployment.yaml file shown below.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: auth-service-app
    spec:
      selector:
        matchLabels:
          app: auth-service-app
      template:
        metadata:
          labels:
            app: auth-service-app
        spec:
          containers:
            - name: auth-service-app
              image: noyandocker/authservice
              imagePullPolicy: IfNotPresent
              ports:
                - containerPort: 7777
              env:
                - name: CONFIG_SERVER_URL
                  valueFrom:
                    configMapKeyRef:
                      name: config-cm
                      key: config_url
                - name: EUREKA_SERVER_ADDRESS
                  valueFrom:
                    configMapKeyRef:
                      name: eureka-cm
                      key: eureka_service_address
                - name: DB_HOST
                  valueFrom:
                    configMapKeyRef:
                      name: mysql-cm
                      key: hostname

    ---

    apiVersion: v1
    kind: Service
    metadata:
      name: auth-service-svc
    spec:
      selector:
        app: auth-service-app
      ports:
        - port: 80
          targetPort: 7777

Here is the config map yaml file

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: config-cm
    data:
      config_url: "config-server-svc"

    ---

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: eureka-cm
    data:
      eureka_service_address: "http://eureka-0.eureka:8761/eureka"

    ---

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: mysql-cm
    data:
      hostname: "mysql-0.mysql"

Here is the config-server-deployment.yaml file

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: config-server-app
    spec:
      selector:
        matchLabels:
          app: config-server-app
      template:
        metadata:
          labels:
            app: config-server-app
        spec:
          containers:
            - name: config-server-app
              image: noyandocker/configserver
              imagePullPolicy: IfNotPresent
              ports:
                - containerPort: 9296
              readinessProbe:
                httpGet:
                  path: /actuator/health
                  port: 9296
                initialDelaySeconds: 20
                timeoutSeconds: 10
                periodSeconds: 3
                failureThreshold: 2
              livenessProbe:
                httpGet:
                  path: /actuator/health
                  port: 9296
                initialDelaySeconds: 30
                timeoutSeconds: 2
                periodSeconds: 8
                failureThreshold: 1
              env:
                - name: EUREKA_SERVER_ADDRESS
                  valueFrom:
                    configMapKeyRef:
                      name: eureka-cm
                      key: eureka_service_address

    ---

    apiVersion: v1
    kind: Service
    metadata:
      name: config-server-svc
    spec:
      selector:
        app: config-server-app
      ports:
        - port: 80
          targetPort: 9296

I thought all the services will start simultaneously. Config Server is the Dependent Service for all other Serivces like auth service and this Auth service should not start until Config Server service is up and running.

How can I do that?

Here is my repo : Link

Here is my docker hub : Link

Here is git backend system : Link

Attach the log file

I shared the logs above

Operating System

Windows

Driver

Docker

k8s-triage-robot commented 1 year ago

The Kubernetes project currently lacks enough contributors to adequately respond to all issues.

This bot triages un-triaged issues according to the following rules:

You can:

Please send feedback to sig-contributor-experience at kubernetes/community.

/lifecycle stale

k8s-triage-robot commented 1 year ago

The Kubernetes project currently lacks enough active contributors to adequately respond to all issues.

This bot triages un-triaged issues according to the following rules:

You can:

Please send feedback to sig-contributor-experience at kubernetes/community.

/lifecycle rotten

k8s-triage-robot commented 1 year ago

The Kubernetes project currently lacks enough active contributors to adequately respond to all issues and PRs.

This bot triages issues according to the following rules:

You can:

Please send feedback to sig-contributor-experience at kubernetes/community.

/close not-planned

k8s-ci-robot commented 1 year ago

@k8s-triage-robot: Closing this issue, marking it as "Not Planned".

In response to [this](https://github.com/kubernetes/minikube/issues/15679#issuecomment-1599952612): >The Kubernetes project currently lacks enough active contributors to adequately respond to all issues and PRs. > >This bot triages issues according to the following rules: >- After 90d of inactivity, `lifecycle/stale` is applied >- After 30d of inactivity since `lifecycle/stale` was applied, `lifecycle/rotten` is applied >- After 30d of inactivity since `lifecycle/rotten` was applied, the issue is closed > >You can: >- Reopen this issue with `/reopen` >- Mark this issue as fresh with `/remove-lifecycle rotten` >- Offer to help out with [Issue Triage][1] > >Please send feedback to sig-contributor-experience at [kubernetes/community](https://github.com/kubernetes/community). > >/close not-planned > >[1]: https://www.kubernetes.dev/docs/guide/issue-triage/ Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md). If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository.