В соединении отказано при вызове службы 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)
Он не был настроен для подключения к «сервису-А», он был настроен для подключения к локальному хосту? Это сообщение об ошибке объясняет, почему ваш клиент подключается к неправильному адресу.