개인공부/트러블슈팅

[ Trouble-Shooting ] 컨테이너 간 통신에서 발생한 Failed to send HTTP request to endpoint

KEEMSY 2023. 10. 26. 17:00

문제 정의

발생한 에러 로그

 

컨테이너 환경을 구축하고 테스트를 하는 과정에서 에러가 발생했다.

  • Kafka 이벤트를 발행하는 API 테스트 간, Kafka 이벤트 발행 시, schema-registry 통신간 Connection refused 에러가 발생했다.

 

브로커 컨테이너에 접속하여 curl 을 보내보았으나 역시나 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 포트가 닫혀있는 것은 아닐까? 하는 생각이 들었다.(컨테이너는 정상적으로 띄워져 있는 상황

 


해결 방안 수립

 

  1. 네트워크에 포함되는 컨테이너를 확인한다.
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 확인할 수 있었다.

 


  1. 컨테이너 내 접근하여, 열려있는 포트를 확인한다.
    netstat -tnlp

netstat 을 통한 포트 확인 결과

컨테이너 내부에 접근하여 확인한 포트상황

  • 8181 포트가 열려있지 않음을 확인할 수 있었다.

 


조치 및 구현

 

상황을 재현하기 위해 컨테이너를 종료 후 다시 가동하니 문제가 해결되었다.


결과 관찰

 

특별한 장애의 원인은 알 수 없었다.(아쉽다..) 장애가 발생할 때에는 반복되는 장애인지 확인이 필요할 듯 싶다. 다음번 같은 장애가 발생한다면, 로그를 정확하게 확인하고 기록하여 디버깅해봐야겠다.

 

그런데 의문인 것은 어떻게 컨테이너 내부에 8181포트가 열리지 않고서 docker 컨테이너가 가동될 수 있었을까?

728x90