KeyCloak 容器拒绝或重置来自同一 WSL2 Ubuntu 主机上 Kong 容器的连接

问题描述 投票:0回答:1

我正在 callistaenterprise/blog-api-gateway-kong 中做教程:演示 Kong API 网关用法的示例项目。它在 MacOS 上运行良好。然而,我在 WSL2 Ubuntu 上设置相同的

docker-compose
时遇到了麻烦。

keycloak
容器设置为:

keycloak:
    image: quay.io/keycloak/keycloak
    ports:
      - "9080:9080"
      - "9443:9443"
    environment:
      KEYCLOAK_ADMIN: admin
      KEYCLOAK_ADMIN_PASSWORD: admin
    command: 
      - start-dev
      - --db=dev-mem
      - --hostname=host.docker.internal
      - --http-port=9080
      - --https-port=9443
      - --https-certificate-file=/opt/keycloak/ssl/server/localhost.crt
      - --https-certificate-key-file=/opt/keycloak/ssl/server/localhost.key
      - --https-trust-store-file=/opt/keycloak/ssl/CA/localCA.p12
      - --https-trust-store-password=secret
      - --https-client-auth=request
      - --import-realm
    volumes:
      - ./keycloak-test-realm.json:/opt/keycloak/data/import/realm.json
      - ./certs:/opt/keycloak/ssl

并且

kong
容器通过以下方式访问
keycloak

- name: oidc
  host:  upstream
  port: 80
  protocol: http
  plugins: 
  - name: oidc
    config: 
      discovery: http://host.docker.internal:9080/realms/test/.well-known/openid-configuration
      client_id: oidc-client
      client_secret: secret
  routes:
  - name: oidc-route
    paths:
    - /oidc/
    strip_path: true

本教程在

127.0.0.1 host.docker.internal
 中添加了 
/etc/hosts

条目
  • 使用 Windows 10 上的 WSL 2,
    hosts
    文件具有类似
    10.171.xxx.xxx host.docker.internal
    的条目,该条目无法访问,并且可能是由 Windows 10 的 Docker Desktop 放置在那里的,因此我将
    generateHosts = false
    放入
    /etc/wsl.conf
    文件中将
    host.docker.internal
    的 IP 地址设置为
    127.0.0.1

问题是,当我执行

http http://host.docker.internal:8080/oidc/api
时,它又向
http://host.docker.internal:9080/realms/test/.well-known/openid-configuration
发出请求并返回连接拒绝的错误。

  • 如果在
    network_mode: host
    容器中添加
    kong
    选项,
    http http://host.docker.internal:8080/oidc/api
    将返回 连接被对等方重置的错误。
    • 如果
      keycloak
      容器也有
      network_mode: host
      ,错误将再次是 连接被拒绝

但是在这两种情况下,

http http://host.docker.internal:9080/realms/test/.well-known/openid-configuration
都可以正常工作。

似乎是 Windows/WSL/Docker 网络设置问题。谁能解释一下吗?

docker docker-compose keycloak kong
1个回答
0
投票

尝试了不同的设置并设法使其正常工作。

  • 首先,Windows/WSL 环境可能会造成麻烦。默认情况下,Windows 防火墙默认阻止 WSL 环境访问主机。 Windows 主机文件中的条目
    host.docker.internal
    始终是 Windows 主机,但 WSL 无法访问。
    • 公司 IT 不允许个人更改 Windows 防火墙设置。要求例外将是官僚主义的噩梦。放弃吧。
  • 所以我必须坚持将
    host.docker.internal
    设置为
    127.0.0.1
    并使用
    generateHosts = false
    文件设置
    /etc/wsl.conf
    。唯一有效的配置是:
    • kong
      keycloak
      容器都必须将网络模式设置为
      host
    • 两个容器都必须添加卷映射
      /etc/hosts:/etc/hosts
    • 如果没有上述两个更改,将
      oidc
      服务的
      discovery
      URL 更改为
      http://keycloak:9080/realms/test/.well-known/openid-configuration
      可以实现 Docker 间访问工作,但它会短暂停止,因为最后一步是 HTTP 重定向到
      http://keycloak:9080/realms/test/protocol/openid-connect/auth
      ,但主机无法解决
      keycloak
      • 但是主机可以 ping 通
        keycloak
      • 的 IP 地址
© www.soinside.com 2019 - 2024. All rights reserved.