首页 > 解决方案 > Docker Https 与 Azure Key Vault 使用 DevOps 发布管道

问题描述

背景:

我正在从普通的应用程序服务计划提供身份验证服务器,并切换到将身份验证服务器作为 docker 容器提供服务。我使用 CI 与 dockerfile 和 azure-pipelines.yaml 将图像推送到注册表。这会触发我使用 Azure Web App on Container Deploy 任务部署的 CD。在我尝试根据 Authorize 属性验证我的 api 之前,这一切似乎都很好。看来,即使我使用的是启用了 https 的自定义域。生成的令牌仍然引用 http 而不是 https。

为了规避这一点,我尝试了添加配置文件或“docker-compose.yaml”。但是,当我这样做时,我的应用程序正在崩溃。所以我的两个问题是:

- 我是否正确运行它以在我的 docker 实例中使用 Https?

-另外,我如何正确地将密钥库机密传递给 docker compose?

这是我的yaml:

version: '3.4'
variables:
    - group: VKVAPI
services:
    webapp:
        image: vkv.azurecr.io/vkvauth:latest
        ports:
            - '8000:80'
            - '8001:443'
        environment:
            - ASPNETCORE_HTTPS_PORT=443
            - 'ASPNETCORE_URLS=https://+;http://+'
            - ASPNETCORE_Kestrel__Certificates__Default__Password=Variable!@#
            - ASPNETCORE_Kestrel__Certificates__Default__Path=$(variable)

同样在我的日志流中,我得到:

2020-08-27T23:14:29.758256402Z: [ERROR]  Unhandled exception. Interop+Crypto+OpenSslCryptographicException: error:2006D080:BIO routines:BIO_new_file:no such file
2020-08-27T23:14:29.758271702Z: [ERROR]     at Interop.Crypto.CheckValidOpenSslHandle(SafeHandle handle)
2020-08-27T23:14:29.758398002Z: [ERROR]     at Internal.Cryptography.Pal.OpenSslX509CertificateReader.FromFile(String fileName, SafePasswordHandle password, X509KeyStorageFlags keyStorageFlags)
2020-08-27T23:14:29.758404102Z: [ERROR]     at System.Security.Cryptography.X509Certificates.X509Certificate..ctor(String fileName, String password, X509KeyStorageFlags keyStorageFlags)
2020-08-27T23:14:29.758408302Z: [ERROR]     at System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(String fileName, String password)
2020-08-27T23:14:29.758412302Z: [ERROR]     at Microsoft.AspNetCore.Server.Kestrel.KestrelConfigurationLoader.LoadCertificate(CertificateConfig certInfo, String endpointName)

标签: azuredockerhttpsazure-devopsazure-keyvault

解决方案


我是否正确运行它以在我的 docker 实例中使用 Https?

通过 docker-compose 使用 HTTPS 运行 docker 容器没有问题。请参阅使用 docker-compose 启动具有 https 支持的容器的详细信息。

另外,我如何正确地将密钥库机密传递给 docker compose?

导致该错误的可能原因是 Azure Web App for Container 中支持的Docker Compose 选项不包含variables. 因此,当您设置变量块并在其中使用变量时,就会导致错误。我建议你使用没有变量的绝对值。


推荐阅读