почему docker compose dns не разрешает фактический ip, а docker run сетевой псевдоним может разрешить? - PullRequest
0 голосов
/ 18 января 2020

У меня есть внешняя сеть, которая используется docker -композицией, а также docker run. Я могу указать сетевой псевдоним в 'docker run', и он будет преобразован в фактический ip контейнера, но псевдоним, который я определю в docker compose, не будет преобразован в реальный ip. почему это? Что я должен сделать, чтобы получить псевдоним в docker -составить разрешение на фактический IP-адрес?

step1: создать внешнюю сеть

docker network create --attachable -d overlay test-docker-network

step2: создать docker -compose, который создает псевдоним docker -compose.yml

version: '3.0'
services:
    host1:
        image: linuxserver/openssh-server
        environment:
            USER_PASSWORD: 'password'
            USER_NAME: 'user'
            PASSWORD_ACCESS: 'true' 
            SUDO_ACCESS: 'true'
        ports:
              - 2222:2222         
        networks:
            default:
                aliases:
                    - netcatalias

networks:
  default:
    external:
      name: test-docker-network

step3: развернуть стек

docker stack deploy -c docker-compose.yml netcat

step4: развернуть контейнер docker run в той же сети

docker run --rm --name host2 --network-alias=myalias -ti --network test-docker-network debian:buster bash

step5: разрешить оба псевдонима

root@de1f75728a7e:~/gitprojects/docker-network-troubleshoot# docker run --rm --name host2 --network-alias=myalias -ti --network test-docker-network debian:buster bash
root@ea765c15dae8:/# ping myalias
PING myalias (10.0.8.5) 56(84) bytes of data.
64 bytes from ea765c15dae8 (10.0.8.5): icmp_seq=1 ttl=255 time=0.022 ms
64 bytes from ea765c15dae8 (10.0.8.5): icmp_seq=2 ttl=255 time=0.042 ms
64 bytes from ea765c15dae8 (10.0.8.5): icmp_seq=3 ttl=255 time=0.034 ms
^C
--- myalias ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 49ms
rtt min/avg/max/mdev = 0.022/0.032/0.042/0.010 ms
root@ea765c15dae8:/# ping netcatalias
PING netcatalias (10.0.8.2) 56(84) bytes of data.
64 bytes from ip-10-0-8-2.ec2.internal (10.0.8.2): icmp_seq=1 ttl=255 time=0.069 ms
64 bytes from ip-10-0-8-2.ec2.internal (10.0.8.2): icmp_seq=2 ttl=255 time=0.068 ms
64 bytes from ip-10-0-8-2.ec2.internal (10.0.8.2): icmp_seq=3 ttl=255 time=0.067 ms
^C
--- netcatalias ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 19ms
rtt min/avg/max/mdev = 0.067/0.068/0.069/0.000 ms
root@ea765c15dae8:/# 

step 6: получить фактический IP-адрес из «проверки сети»

root@de1f75728a7e:~/gitprojects/docker-network-troubleshoot# docker network inspect test-docker-network
[
    {
        "Name": "test-docker-network",
        "Id": "3ev3r0eo2rg81pyb2yovlmmg3",
        "Created": "2020-01-18T03:09:58.748025872Z",
        "Scope": "swarm",
        "Driver": "overlay",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "10.0.8.0/24",
                    "Gateway": "10.0.8.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "2ba6c329d157b4a03480f978645e558bb6b46d9d5c7af3d152d943aae75c696a": {
                "Name": "netcat_host1.1.180sln82qyxp03rk8o5od5p9a",
                "EndpointID": "cf2eaf42b10083296696c3cad8e43fe392ed2374cd65fd8aa8c048a134171bd2",
                "MacAddress": "02:42:0a:00:08:03",
                "IPv4Address": "10.0.8.3/24",
                "IPv6Address": ""
            },
            "ea765c15dae8c1cf6f6945447897a126fdf03ae1e42d2811c95d94a9d9112f39": {
                "Name": "host2",
                "EndpointID": "67ca483fd4bd231db74a39ba8f782a95c102fc04937ef9e245bfc14100f61d11",
                "MacAddress": "02:42:0a:00:08:05",
                "IPv4Address": "10.0.8.5/24",
                "IPv6Address": ""
            },
            "lb-test-docker-network": {
                "Name": "test-docker-network-endpoint",
                "EndpointID": "0754c146c555fdf0e2d683c8ead3e0670196e201148c411f35899df226d77cc4",
                "MacAddress": "02:42:0a:00:08:04",
                "IPv4Address": "10.0.8.4/24",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.driver.overlay.vxlanid_list": "4106"
        },
        "Labels": {},
        "Peers": [
            {
                "Name": "08bdcafe53fb",
                "IP": "10.0.0.30"
            }
        ]
    }
]

Проблема:

мы видим что 'docker run' псевдоним 'myalias' правильно разрешается в (10.0.8.5) из 'docker проверка сети'. Но «netcatalias» разрешается в (10.0.8.2). Но на самом деле это должно быть разрешено до "10.0.8.3". Почему это происходит. Как разрешить netcatalias в "10.0.8.3"?

1 Ответ

0 голосов
/ 20 января 2020

Это ip балансировщика нагрузки виртуального сервиса, который находится перед сервисами и распределяет трафик c по репликам.
Если вы измените режим маршрутизации сервиса на dnsrr вместо vip (virtual-ip), то docker Служба DNS разрешает имена в ips контейнера в режиме циклического перебора.

...