В соединении отказано при вызове службы Kubernetes ClusterIP

Я пытаюсь развернуть два приложения в локальном кластере k3d k8s. Service-A предоставляет конечную точку REST, которая используется Service-B. Это конфигурация:

Сервис-А

      ---
apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/name: service-A
    app.kubernetes.io/version: 1.0.1-SNAPSHOT
  name: service-A
spec:
  ports:
  - name: http
    port: 8554
    targetPort: 8554
  selector:
    app.kubernetes.io/name: service-A
    app.kubernetes.io/version: 1.0.1-SNAPSHOT
  type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app.kubernetes.io/version: 1.0.1-SNAPSHOT
    app.kubernetes.io/name: service-A
  name: service-A
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/version: 1.0.1-SNAPSHOT
      app.kubernetes.io/name: service-A
  template:
    metadata:
      labels:
        app.kubernetes.io/version: 1.0.1-SNAPSHOT
        app.kubernetes.io/name: service-A
    spec:
      containers:
      - env:
        - name: KUBERNETES_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        image: registry.localhost:12345/service-A
        imagePullPolicy: IfNotPresent
        name: service-A
        ports:
        - containerPort: 8554
          name: http
          protocol: TCP

Сервис-Б

      ---
apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/name: service-B
    app.kubernetes.io/version: 1.0.1-SNAPSHOT
  name: service-B
spec:
  ports:
  - name: http
    port: 8550
    targetPort: 8550
  selector:
    app.kubernetes.io/name: service-B
    app.kubernetes.io/version: 1.0.1-SNAPSHOT
  type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app.kubernetes.io/version: 1.0.1-SNAPSHOT
    app.kubernetes.io/name: service-B
  name: service-B
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/version: 1.0.1-SNAPSHOT
      app.kubernetes.io/name: service-B
  template:
    metadata:
      labels:
        app.kubernetes.io/version: 1.0.1-SNAPSHOT
        app.kubernetes.io/name: service-B
    spec:
      containers:
      - env:
        - name: KUBERNETES_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: SERVICE_A_ADDR
          valueFrom:
            configMapKeyRef:
              key: service_a_addr
              name: app-configmap
        image: registry.localhost:12345/service-B-native
        imagePullPolicy: IfNotPresent
        name: service-B
        ports:
        - containerPort: 8550
          name: http
          protocol: TCP

Карта конфигурации

      apiVersion: v1
kind: ConfigMap
metadata:
  name: app-configmap
data:
  service_a_addr: service-A

Как видите, Service-B ожидает переменную env, значение которой считывается из configmap, содержащего имя Service-A.

Однако, когда Service-B пытается вызвать Service-A, я получаю исключение, связанное с отказом в соединении:

      Caused by: javax.ws.rs.ProcessingException: RESTEASY004655: Unable to invoke request: org.apache.http.conn.HttpHostConnectException: Connect to localhost:8554 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused (Connection refused)
    at org.jboss.resteasy.client.jaxrs.engines.ManualClosingApacheHttpClient43Engine.invoke(ManualClosingApacheHttpClient43Engine.java:297)
    at org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.invoke(ClientInvocation.java:491)
    at org.jboss.resteasy.client.jaxrs.internal.proxy.ClientInvoker.invokeSync(ClientInvoker.java:152)
    at org.jboss.resteasy.client.jaxrs.internal.proxy.ClientInvoker.invoke(ClientInvoker.java:115)
    at org.jboss.resteasy.client.jaxrs.internal.proxy.ClientProxy.invoke(ClientProxy.java:76)
    at com.sun.proxy.$Proxy291.getLoginId(Unknown Source)
    at java.lang.reflect.Method.invoke(Method.java:566)
    at org.jboss.resteasy.microprofile.client.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:147)
    at com.sun.proxy.$Proxy292.getLoginId(Unknown Source)

Есть идеи о том, что может происходить? Yaml-файлы kubernetes были автоматически созданы Java-фреймворком Quarkus.

1 ответ

Connect to localhost:8554 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused (Connection refused)

Он не был настроен для подключения к «сервису-А», он был настроен для подключения к локальному хосту? Это сообщение об ошибке объясняет, почему ваш клиент подключается к неправильному адресу.

Другие вопросы по тегам