Я делаю веб-приложение с докером, мне нужно запустить код, созданный общедоступным пользователем (совсем небезопасно), я использую redis для передачи некоторых данных между моими контейнерами (используя сокет, общий для именованного тома)

schema

Как я могу запретить небезопасным контейнерам отправлять данные в Redis?

Мой докер-compose.yml

version: "3"

services:
  redis:
    image: redis:latest
    command: >
      sh -c "chown redis /tmp/redis/
             redis-server /usr/local/etc/redis/redis.conf"
    volumes:
      - redis_socket:/tmp/redis
  unsafe_container:
      build:
        context: ./docker
        dockerfile: Dockerfile
      command: python unsafe.py
      volumes:
        - redis_socket:/tmp/redis:ro
      links:
        - redis
      depends_on:
        - redis
  data_in:
    build:
      context: ./docker
      dockerfile: Dockerfile-data
    command: >
      sh -c "python3 /code/manage.py wait_db
             python3 /code/manage.py start_dc"
    volumes:
      - redis_socket:/tmp/redis
    links:
      - redis
    depends_on:
      - redis
  volumes:
    redis_socket:

Если я сделаю подчиненное устройство Redis, могу ли я настроить его так, чтобы он принимал только чтение из всех подключений, кроме главного Redis?

Благодарность

РЕДАКТИРОВАТЬ: после некоторых тестов подчиненное устройство по умолчанию только для чтения, но я не могу подключить подчиненное устройство к мастеру с помощью сокета, я ничего не нашел об этой функции / проблеме в документах

0
Bast 18 Ноя 2018 в 03:26

1 ответ

Лучший ответ

Реплики Redis в первую очередь предназначены для обеспечения высокой доступности и, следовательно, для подключения по сети. Они не поддерживают соединения UDS с мастером.

Однако вы можете использовать socat для предоставления сокета Unix как TCP (например, https://serverfault.com/questions/517906/how-to-expose-a-unix-domain-socket-directly-over-tcp).

1
Itamar Haber 18 Ноя 2018 в 18:32