将 Azure Arc 身份端点公开到 Docker 容器

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

我在 docker swarm 的所有节点上安装了 Azure Arc。我想使用他们的托管标识来访问 Azure 资源。从主机查询访问令牌工作正常,但我很难从容器内部获得相同的访问权限。

我尝试了

extra_host
、端口映射等,但我不断收到连接拒绝/连接失败错误。
host
网络模式选项可能会起作用,但在 docker swarm 中不可用。我也找不到任何有关将 Azure Arc 端点绑定从
127.0.0.1
更改为不同网络接口的文档。

我现在基本上拥有的是:

version: '3'
services:
  api:
    ports:
      - '5127:8080'
      - '40342:40342'
    environment:
      - 'IMDS_ENDPOINT=http://127.0.0.1:40342'
      - 'IDENTITY_ENDPOINT=http://127.0.0.1:40342/metadata/identity/oauth2/token'

如何让 docker 容器访问身份端点,以便我的 ASP.NET 服务器可以在 azure 中对自身进行身份验证?

.net linux azure docker docker-swarm
1个回答
0
投票

启用 Azure Arc 的服务器在物理服务器的本地主机上公开 IMDS(Azure 实例元数据服务)端点。默认情况下,无法从 Docker 容器内访问该端点,因为容器与主机网络隔离。

由于您无法直接更改 Azure Arc 端点的绑定,因此您可以尝试在将请求转发到 IMDS 端点的主机上运行代理服务器。然后可以将 Docker 容器配置为与此代理通信,而不是直接与 IMDS 端点通信。

server {
    listen 80;
    
    location / {
        proxy_pass http://127.0.0.1:40342;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
    }
}

然后,您可以在 Docker 外部的主机上运行

nginx
,但监听 Docker 容器可访问的网络接口。

在 Docker Compose 文件中,您需要将环境变量设置为指向主机代理而不是本地主机。

version: '3'
services:
  api:
    ports:
      - '5127:8080'
    environment:
      - 'IMDS_ENDPOINT=http://host.docker.internal:80'
      - 'IDENTITY_ENDPOINT=http://host.docker.internal:80/metadata/identity/oauth2/token'

通过这些更改,Docker 容器中的 ASP.NET 服务器应该能够通过主机代理访问 Azure Arc 身份终结点。

© www.soinside.com 2019 - 2024. All rights reserved.