在Docker中使用非标准端口的代理(如nginx)进行密钥隐藏

iezvtpos  于 2022-11-21  发布在  Nginx
关注(0)|答案(1)|浏览(182)

这是question的后续问题。
最初,我试图让Keycloak在Docker中工作,需要TLS,所以我使用nginx和Docker compose。但是我得到了一个无限的旋转器,就像问题中的人一样,我在试图解决我的问题时通过谷歌找到了这个。所以我在回答中读到问题中的人说不要使用KC_HOSTNAME_PORT。所以我尝试了这个,确实,它在端口443上工作。
这很好,但是我想让Keycloak在我的设置中使用不同的端口,比如8443。有人能解释一下如何根据我在最初的问题中提到的设置来完成这个任务吗?或者发布一个完整的例子,用docker-compose.yml来说明如何使用nginx或traefik来完成这个任务?
编辑:如果有帮助的话,这里是我的docker-compose.yml
第一个
如果我在nginx.environment中使用未注解的KC_HOSTNAME_PORT和未注解的不同端口,我会得到无限的微调器。

tsm1rwdh

tsm1rwdh1#

如果您希望keycloak在不同的端口上公开keycloak,则需要进行两项更改:

  • 更改从Traefik发布web-secure终结点的端口
  • 设置KC_HOSTNAME_PORT以匹配新端口

所以我们得到:

version: "3"

services:
  traefik:
    image: docker.io/traefik
    command:
      - --api.insecure=true
      - --providers.docker
      - --entrypoints.web.address=:80
      - --entrypoints.web-secure.address=:443
    ports:
      - "127.0.0.1:8080:8080"
      - "80:80"
      - "8443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

  keycloak:
    image: quay.io/keycloak/keycloak
    restart: always
    command: start
    environment:
      KC_PROXY_ADDRESS_FORWARDING: "true"
      KC_HOSTNAME_STRICT: "false"
      KC_HOSTNAME: auth.example.com
      KC_HOSTNAME_PORT: 8443
      KC_PROXY: edge
      KC_HTTP_ENABLED: "true"
      KC_DB: postgres
      KC_DB_URL: jdbc:postgresql://postgres:5432/$POSTGRES_DB?ssl=allow
      KC_DB_USERNAME: $POSTGRES_USER
      KC_DB_PASSWORD: $POSTGRES_PASSWORD
      KEYCLOAK_ADMIN: admin
      KEYCLOAK_ADMIN_PASSWORD: password
    labels:
      - "traefik.http.routers.cloud-network-keycloak.rule=Host(`auth.example.com`)"
      - "traefik.http.routers.cloud-network-keycloak.tls=true"
      - "traefik.http.services.cloud-network-keycloak.loadbalancer.server.port=8080"

  postgres:
    image: docker.io/postgres:14
    environment:
      POSTGRES_USER: $POSTGRES_USER
      POSTGRES_PASSWORD: $POSTGRES_PASSWORD
      POSTGRES_DB: $POSTGRES_DB

有了这个配置,再加上本地/etc/hosts文件中的一个适当条目,我就可以访问https://auth.example.com:8443上的keycloak了。

相关问题