Podman기반의 DNS연동
podman을 사용할 경우 네트워크는 cni를 사용하게 되는데, 기본값은 호스트의 DNS를 사용하기 때문에 컨테이너 내부의 DNS를 사용해야할 경우 호출이 불가능.
- docker기반에서 컨테이너간 dns통신상태 확인
$> docker exec -it awx_task ping redis PING redis (172.18.0.5) 56(84) bytes of data. 64 bytes from awx_redis.awxcompose_default (172.18.0.5): icmp_seq=1 ttl=64 time=0.240 ms 64 bytes from awx_redis.awxcompose_default (172.18.0.5): icmp_seq=2 ttl=64 time=0.090 ms 64 bytes from awx_redis.awxcompose_default (172.18.0.5): icmp_seq=3 ttl=64 time=0.074 ms ^C --- redis ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 3ms rtt min/avg/max/mdev = 0.074/0.134/0.240/0.075 ms
- podman 기반에서 컨테이너간 dns통신상태 확인
$ podman exec -it awx_task ping redis ping: redis: Name or service not known
조치사항
- cni에 dnsname 플러그인 설치 및 NetworkManager 연동
- dns패키지 설치
$> yum install dnsmasq podman-plugins -y
- NetworkManager dnsname 플러그인 연동 후 서비스 재시작
$> vi /etc/NetworkManager/NetworkManager.conf ... [main] dns=dnsmasq ...
- cni에 dnsname 플러그인 설치
$> vi /etc/cni/net.d/awxcompose_default.conflist ... { "type": "firewall", "backend": "" }, { "type": "tuning" }, { "type": "dnsname", "domainName": "awxcompose_default", "capabilities": { "aliases": true } } ] }
- 서버 재부팅
- 내부 통신 확인
$> podman exec -it awx_task ping redis PING redis (10.89.0.2) 56(84) bytes of data. 64 bytes from awx_redis (10.89.0.2): icmp_seq=1 ttl=64 time=0.119 ms 64 bytes from awx_redis (10.89.0.2): icmp_seq=2 ttl=64 time=0.047 ms 64 bytes from awx_redis (10.89.0.2): icmp_seq=3 ttl=64 time=0.070 ms 64 bytes from awx_redis (10.89.0.2): icmp_seq=4 ttl=64 time=0.072 ms ^C --- redis ping statistics --- 7 packets transmitted, 7 received, 0% packet loss, time 155ms rtt min/avg/max/mdev = 0.047/0.069/0.119/0.021 ms