Оверлейная сеть Docker не работает между портами приложений узловLinux

Ответить Пред. темаСлед. тема
Гость
 Оверлейная сеть Docker не работает между портами приложений узлов

Сообщение Гость »

Раньше у меня была оркестровка Docker Swarm с 6 узлами. После добавления в оркестровку нового Nginx возникла проблема с соединением между портами сервисов узлов. Ниже я делюсь точным примером своей оркестровки.
Что я пробовал;
1-

Код: Выделить всё

TCP port 2377 for cluster management communications

TCP and UDP port 7946 for communication among nodes

UDP port 4789 for overlay network traffic
2- sudo ethtool -K tx-checksum-ip-generic off
3- создание сети Docker -d overlay --opt com.docker.network.driver.mtu=1450 nginx
Вы можете выполнить следующие шаги, чтобы установить Docker на свой сервер Amazon Linux:
  • Обновите свой сервер:
  • Сначала обновите существующие пакеты. .
    sudo yum update -y
  • Установить пакет Docker :
  • Установите Docker из репозитория для Amazon Linux 2.
    sudo amazon- linux-extras install docker -y
  • Запустить Docker:
    sudo service docker start
  • Настройка автоматического запуска:
  • Чтобы автоматически запускать Docker при запуске сервера:
    sudo systemctl Enable Docker
  • Добавить пользователя в группу Docker:
  • Этот шаг необходим, если вы хотите запускать команды Docker без судо. Например, чтобы добавить пользователя «ec2-user» в группу Docker:
    sudo usermod -a -G docker ec2-userдокер newgrp
Создать группу докеров из первого узла aws< /h1>

Код: Выделить всё

sudo docker swarm init --advertise-addr 
доступен эластичный ip эластичный ip
это та часть, которая появляется в Amazon, требуются привилегии
После добавления второго, как работает для роя , Называем узлы по имени сервиса

Код: Выделить всё

docker node update  --label-add service=hello

docker node update  --label-add service=nginx
Создаем оверлейную сеть

Код: Выделить всё

docker network create -d overlay --opt com.docker.network.driver.mtu=1450 nginx
Первый узел будет hello-service
Копировать код
sudo nano

Код: Выделить всё

const express = require('express');
const app = express();
const port = 3000;

app.get('/hello', (req, res) => {
res.send('Hello World!');
});

app.listen(port, () => {
console.log(`App is running at http://localhost:${port}`);
});
сохраните app.js
Скопируйте код package.json
sudo nano

Код: Выделить всё

{
"name": "express-app",
"version": "1.0.0",
"description": "A simple Express.js application",
"main": "app.js",
"scripts": {
"start": "node app.js"
},
"dependencies": {
"express": "^4.17.1"
}
}
сохранить package.json
sudo nano

Код: Выделить всё

# Get a Node.js-based image
FROM node:latest

# Create a working directory where we can run the application code
WORKDIR /usr/src/app

# Install application dependencies
COPY package*.json ./
RUN npm install

# Copy the application code
COPY . .

# Run the application
CMD [ "node", "app.js" ]
сохраните Dockerfile
  • Теперь создайте образ Docker, используя Dockerfile. Выполните следующую команду в терминале в каталоге, содержащем этот файл и файлы вашего приложения:
Копировать код

Код: Выделить всё

docker build -t express-app .

docker service create --name hello-service --network nginx --constraint 'node.labels.service==hello' --publish 3000:3000 express-app:latest
После создания hello-service мы создаем nginx-service
docker-сервис create --name hello-service --network nginx --constraint 'node .labels.service==hello' --publish 3000:3000 express-app:latest
sudo nano

Код: Выделить всё

worker_processes 1;

events { worker_connections 1024; }

http {
resolver 127.0.0.11 valid=10s;

server {
listen 80;

location / {
default_type text/plain;
return 200 'Hello World!';
}

location ~ ^/hello-service {
rewrite ^/hello-service/(.*) /$1 break;
proxy_pass http://hello-service:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'Upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}

}
}
сохраните nginx.conf
  • Затем создайте файл с именем Dockerfile и вставьте в него следующее содержимое:
    Dockerfile
Копировать код
sudo nano

Код: Выделить всё

# Get an Nginx-based image
FROM nginx:latest

# Copy custom Nginx configuration
COPY nginx.conf /etc/nginx/nginx.conf
сохраните Dockerfile
  • Создайте образ Docker, используя Dockerfile. Запустите следующую команду в терминале в каталоге, содержащем этот файл и файл конфигурации Nginx:
    bash
Копировать код

Код: Выделить всё

docker build -t mynginx -f Dockerfile .
  • Для запуска образа Docker можно использовать следующую команду:
    bash
Копировать код

Код: Выделить всё

docker service create --name nginx-service --network nginx --constraint 'node.labels.service==nginx' --publish 80:80 mynginx:latest
Теперь проблема в том, что когда мы пытаемся получить IP4-адрес узла nginx запроса, приходит ответ. Когда мы пингуем внутри контейнера nginx другой узел внутри контейнера helle-service по имени службы, работает преобразователь имени хоста. Но когда мы пытаемся подключить порт, начинаются проблемы :) Есть идеи?

Подробнее здесь: https://stackoverflow.com/questions/782 ... tion-ports
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Linux»