Keycloak, Nodejs API и Traefik все в Docker -> только 403 - PullRequest
1 голос
/ 05 мая 2020

может кто мне поможет. У меня есть keycloak, мой nodejs -сервер и traefik, все они установлены с помощью docker -compose. Казалось, все в порядке, пока я не вызвал маршрут из своего интерфейса к nodejs API. Что бы я ни пробовал, я все время получаю 403. Когда сервер nodejs запущен, а не docker, он работает. Странно на мой взгляд. Вот мой Docker Compose, если это помогает:

version: '3.8'

services:
  mariadb:
    image: mariadb:latest
    container_name: mariadb
    labels:
      - "traefik.enable=false"
    networks: 
      - keycloak-network
    environment: 
      - MYSQL_ROOT_PASSWORD=
      - MYSQL_DATABASE=
      - MYSQL_USER=
      - MYSQL_PASSWORD=
    command: mysqld --lower_case_table_names=1
    volumes:
      - ./:/docker-entrypoint-initdb.d
  keycloak:
    image: jboss/keycloak
    container_name: keycloak
    labels:
      - "traefik.http.routers.keycloak.rule=Host(`keycloak.localhost`)"
      - "traefik.http.routers.keycloak.tls=true"
    networks:
      - keycloak-network
    environment:
      - DB_DATABASE=
      - DB_USER=
      - DB_PASSWORD=
      - KEYCLOAK_USER=
      - KEYCLOAK_PASSWORD=
      - KEYCLOAK_IMPORT=/tmp/example-realm.json
      - PROXY_ADDRESS_FORWARDING=true
    ports:
      - 8443:8443
    volumes:
      - ./realm-export.json:/tmp/example-realm.json
    depends_on:
      - mariadb
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: phpmyadmin
    labels:
      - "traefik.http.routers.phpmyadmin.rule=Host(`phpmyadmin.localhost`)"
    networks:
      - keycloak-network
    links:
      - mariadb:db
    ports:
      - 8081:80
    depends_on:
      - mariadb
  spectory-backend:
    image: spectory-backend
    container_name: spectory-backend
    labels:
      - "traefik.http.routers.spectory-backend.rule=Host(`api.localhost`)"
      - "traefik.port=4000"
    ports:
      - 4000:4000
    networks:
      - keycloak-network
    depends_on:
      - mariadb
      - keycloak
  spectory-frontend:
    image: spectory-frontend
    container_name: spectory-frontend
    labels:
      - "traefik.http.routers.spectory-frontend.rule=Host(`spectory.localhost`)"
    ports:
      - 4200:80
    depends_on:
      - mariadb
      - keycloak
      - spectory-backend
  traefik-reverse-proxy:
    image: traefik:v2.2
    command: 
      - --api.insecure=true 
      - --providers.docker
      - --entrypoints.web-secure.address=:443
      - --entrypoints.web.address=:80
      - --providers.file.directory=/configuration/
      - --providers.file.watch=true
    labels:
      - "traefik.http.routers.traefik-reverse-proxy.rule=Host(`traefik.localhost`)"
    ports:
      - "80:80"
      - "443:443"
      - "8082:8080"
    networks:
      - keycloak-network
    volumes:
      - ./traefik.toml:/configuration/traefik.toml
      - /var/run/docker.sock:/var/run/docker.sock
      - ./ssl/tls.key:/etc/https/tls.key
      - ./ssl/tls.crt:/etc/https/tls.crt

networks:
  keycloak-network:
    name: keycloak-network

Я также пробовал stati c ip-адреса для nodejs и keycloak -> не работал. Здесь, в StackOverflow, кто-то упомянул, что использование https поможет -> не сработало В значительной степени моя ситуация: Ссылка . Для меня цель состоит в том, чтобы даже API был доступен через traefik

Кстати, мой angular интерфейс может взаимодействовать с keycloak. Также в docker. Я также могу пропинговать keycloak docker с nodejs docker. Nodejs параметры конфигурации напрямую формируют keycloak.

Я действительно не знаю, что делать дальше. Кто-нибудь пробовал нечто подобное?

...