개인공부/트러블슈팅
[ Trouble-Shooting ] 컨테이너 간 통신에서 발생한 Failed to send HTTP request to endpoint
KEEMSY
2023. 10. 26. 17:00
문제 정의
컨테이너 환경을 구축하고 테스트를 하는 과정에서 에러가 발생했다.
- Kafka 이벤트를 발행하는 API 테스트 간, Kafka 이벤트 발행 시, schema-registry 통신간 Connection refused 에러가 발생했다.
사실 수집
shoes-ordering-app1 | 2023-10-26 06:20:26.284 INFO 1 --- [nio-8181-exec-1] o.a.k.clients.producer.KafkaProducer : [Producer clientId=producer-1] Instantiated an idempotent producer.
shoes-ordering-app1 | 2023-10-26 06:20:26.313 INFO 1 --- [nio-8181-exec-1] o.a.kafka.common.utils.AppInfoParser : Kafka version: 3.0.1
shoes-ordering-app1 | 2023-10-26 06:20:26.314 INFO 1 --- [nio-8181-exec-1] o.a.kafka.common.utils.AppInfoParser : Kafka commitId: 8e30984f43e64d8b
shoes-ordering-app1 | 2023-10-26 06:20:26.314 INFO 1 --- [nio-8181-exec-1] o.a.kafka.common.utils.AppInfoParser : Kafka startTimeMs: 1698301226313
shoes-ordering-app1 | 2023-10-26 06:20:26.356 INFO 1 --- [ad | producer-1] org.apache.kafka.clients.Metadata : [Producer clientId=producer-1] Resetting the last seen epoch of partition create-product-request-0 to 0 since the associated topicId changed from null to TCWHl3L9RzuwVV1pmqcK8A
shoes-ordering-app1 | 2023-10-26 06:20:26.356 INFO 1 --- [ad | producer-1] org.apache.kafka.clients.Metadata : [Producer clientId=producer-1] Cluster ID: V4lQMNtDT9-m4F4oufcKIQ
shoes-ordering-app1 | 2023-10-26 06:20:26.475 ERROR 1 --- [nio-8181-exec-1] i.c.k.s.client.rest.RestService : Failed to send HTTP request to endpoint: http://schema-registry:8081/subjects/create-product-request-value/versions?normalize=false
shoes-ordering-app1 |
shoes-ordering-app1 | java.net.ConnectException: Connection refused
원인 추론
가장 먼저 생각한 문제의 원인은, 컨테이너 환경에서는 컨테이너 이름(혹은 호스트네임)을 통해 호스트 통신을 진행하고 있는데, 이 부분에서 문제가 된 것은 아닐까? 하는 생각이 들었다.
- 호스트 네임 통신을 위해서는 통신하는 컨테이너가 같은 네트워크에 존재해야한다.
- 같은 네트워크에 존재하는 컨테이너끼리는 컨테이너 이름을 활용하여 ping 명령어 수행이 가능하다.
또는 schema-registry 컨테이너의 8181 포트가 닫혀있는 것은 아닐까? 하는 생각이 들었다.(컨테이너는 정상적으로 띄워져 있는 상황
해결 방안 수립
- 네트워크에 포함되는 컨테이너를 확인한다.
docker network inspect container_shoes-ordering-system
네트워크 확인 결과
// docker network inspect container_shoes-ordering-system 결과
"Containers": {
"0cc0f95134efa7e5b2fa860f2f4d84c436f8641218fd13e113eb243c3d16bf97": {
"Name": "shoes-ordering-nginx",
"EndpointID": "c4d1380021b5dd4fac731e78473d694e41b9fab374697ebb1b37c25cda4e01d1",
"MacAddress": "02:42:ac:1b:00:0b",
"IPv4Address": "172.27.0.11/16",
"IPv6Address": ""
},
"7aba853bfbb863634d823863d369d1a13599b74ccfa3a081e4e3e8956668e5c8": {
"Name": "shoes-ordering-app1",
"EndpointID": "49713aea30333bc6b2ae4639bd26d9e0a3c65d9b790bb61c1fdb7d91578111bb",
"MacAddress": "02:42:ac:1b:00:0a",
"IPv4Address": "172.27.0.10/16",
"IPv6Address": ""
},
// 정상 존재 확인
"9e7ffc3446e241e920486b623cda7c0778f0c2622f24068eeb6dc92e0c15867e": {
"Name": "container-schema-registry-1",
"EndpointID": "d310344b638a3f47914ba507fffe48b912508a7d20bf0901b59f878cf64b869d",
"MacAddress": "02:42:ac:1b:00:07",
"IPv4Address": "172.27.0.7/16",
"IPv6Address": ""
},
// .. 다른 컨테이너들 ..
}
// ping 확인 root@7aba853bfbb8:/# ping container-schema-registry-1
PING container-schema-registry-1 (172.27.0.7) 56(84) bytes of data.
64 bytes from container-schema-registry-1.container_shoes-ordering-system (172.27.0.7): icmp_seq=1 ttl=64 time=0.352 ms
64 bytes from container-schema-registry-1.container_shoes-ordering-system (172.27.0.7): icmp_seq=2 ttl=64 time=0.055 ms
- 정상적으로 같은 네트워크에 존재함 을 확인하고, 컨테이너에 접근하여 정상 ping 확인할 수 있었다.
- 컨테이너 내 접근하여, 열려있는 포트를 확인한다.
netstat -tnlp
netstat 을 통한 포트 확인 결과
- 8181 포트가 열려있지 않음을 확인할 수 있었다.
조치 및 구현
상황을 재현하기 위해 컨테이너를 종료 후 다시 가동하니 문제가 해결되었다.
결과 관찰
특별한 장애의 원인은 알 수 없었다.(아쉽다..) 장애가 발생할 때에는 반복되는 장애인지 확인이 필요할 듯 싶다. 다음번 같은 장애가 발생한다면, 로그를 정확하게 확인하고 기록하여 디버깅해봐야겠다.
그런데 의문인 것은 어떻게 컨테이너 내부에 8181포트가 열리지 않고서 docker 컨테이너가 가동될 수 있었을까?
728x90