### Openstack Instance & Docker 문제
문제 상황
- 인스턴스에 docker 설치 후 띄운 컨테이너 내부에서 Outbound로 통신 했을 때 불안정함
- 컨테이너 내부에서 curl 했을 때 naver 는 성공하지만, google은 실패함 (client hello 에서 무한 행)
- 같은 인스턴스(오픈스택 CIDR 영역)로 curl 날렸을 땐 성공하지만, 192.168.2.xx(오픈스택이 아닌 CIDR 영역) 로 요청 시 실패
원인
- MTU 사이즈
- openstack 특성상 인스턴스의 기본 nic mtu는 1442. 이를 의도적으로 변경하면 오류남.
- 인스턴스에 올라가는 컨테이너의 mtu는 1500
- 이 둘 간의 불일치가 위의 상황 초래
![image.png](https://blog.kakaocdn.net/dn/cfGKmv/btsKcj8Sb4d/yzk6haltN3FK2wQMuREi5K/img.png)
- eth0 과 veth** 의 mtu가 다르다
해결
- MTU 조정
Docker 서비스 설정 변경
# cat /etc/docker/daemon.json (권장)
{
"mtu": 1450
}
----
#cat /etc/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
After=network.target docker.socket
Requires=docker.socket
[Service]
ExecStart=/usr/bin/docker daemon -H tcp://0.0.0.0:2376 \
-H unix:///var/run/docker.sock \
--storage-driver devicemapper \
--label provider=generic \
--mtu=1442
MountFlags=slave
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity
Environment=
docker compose 사용시 yaml에 별도의 네트워크 생성 후 지정
version: '3'
services:
my_service:
image: my_image
networks:
my_network:
networks:
my_network:
driver: bridge
driver_opts:
com.docker.network.driver.mtu: 1442
[mtu 관련 공식 문서](https://docs.openstack.org/neutron/ussuri/ovn/migration.html)
[mtu 코드 코멘트](https://opendev.org/openstack/neutron/commit/dc4a57d96661fcb56ff916cafbbbdc683653e9c4#diff-ad67bbab992e56663562612622882d0c24827072)