Im using microservice in kubernete and docker and I got an UnknownHostException
when Zuul (gateway) forward request data to service
I can't ping to service container by pod name (but when i use docker swarm instead of Kubernetes, i can ping by host name normally)
This is my service yaml file
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: merchantservice
labels:
run: merchantservice
spec:
template:
metadata:
labels:
name: merchantservice
spec:
containers:
- name: merchantservice
image: merchantservice:latest
ports:
- containerPort: 8001
env:
- name: EUREKA_SERVER
value: "eureka1"
- name: EUREKA_SERVER2
value: "eureka2"
- name: CONFIG_SERVER
value: "configserver"
---
apiVersion: v1
kind: Service
metadata:
name: merchantservice
spec:
selector:
name: merchantservice
ports:
- port: 8001
targetPort: 8001
type: LoadBalancer
And this is error output
2019-05-28 04:29:53.443 WARN 1 --- [nio-8444-exec-6] o.s.c.n.z.filters.post.SendErrorFilter : Error during filtering
com.netflix.zuul.exception.ZuulException: Forwarding error
...
Caused by: com.netflix.client.ClientException: null
...
Caused by: java.lang.RuntimeException: java.net.UnknownHostException: merchantservice-79cc77d9cc-224mf: Try again
at rx.exceptions.Exceptions.propagate(Exceptions.java:57) ~[rxjava-1.3.8.jar!/:1.3.8]
at rx.observables.BlockingObservable.blockForSingle(BlockingObservable.java:463) ~[rxjava-1.3.8.jar!/:1.3.8]
at rx.observables.BlockingObservable.single(BlockingObservable.java:340) ~[rxjava-1.3.8.jar!/:1.3.8]
at com.netflix.client.AbstractLoadBalancerAwareClient.executeWithLoadBalancer(AbstractLoadBalancerAwareClient.java:112) ~[ribbon-loadbalancer-2.3.0.jar!/:2.3.0]
... 158 common frames omitted
Caused by: java.net.UnknownHostException: merchantservice-79cc77d9cc-224mf: Try again
...
Service
– Agonyserver.port=8001 eureka.client.serviceUrl.defaultZone=http://${EUREKA_SERVER:localhost}:9091/eureka,http://${EUREKA_SERVER2:localhost}:9092/eureka
– Philoeureka.client.serviceUrl.defaultZone=
have to do with your question about resolving the DNS name of a Pod? – Agony${EUREKA_SERVER:localhost}
return eureka server hostname => it will become toeureka.client.serviceUrl.defaultZone=http://eureka:9091/eureka
<= why this hostnameeureka
work but zuul occur exception? – Philomerchantservice-79cc77d9cc-224mft
is the pod name not the service name. your zuul is integrated with eureka and ribbon is doing client side discovery by querying the eureka server with service name. It is getting list of host names(pod names) and making a call using the pod name instead of the pod ip, its getting failed. Kindly follow Matthew suggestion of using ip address instead of pod name. – Azalea