Docker compose 正在为 Dotnet 核心项目工作时 Kubernetes 因 SSL 错误而失败

Kubernetes failing with SSL error while Docker compose is working for Dotnet core project

我是 Kubernetes 的新手,我正在本地开发中尝试其中的一些。在我给出问题陈述之前,这里是我的环境和项目状态。

  1. 我有 Windows 10 和 Ubuntu 运行 通过 VS Code 启用 WSL2。
  2. 我已经在 VS Code 中启用了所需的插件(比如 Kubernetes,Docker 等等)
  3. 我安装了 Docker 桌面,启用了 WSL2 + Ubuntu + Kubernetes。
  4. 我的本地系统有 ASP.Net Core 5 工作版本 + ubuntu 到 Docker
  5. 我有 dockerfile + docker compose 文件,我已经测试了所有使用和不使用 SSL 端口的文件,这些文件使用 SSL 和不使用 SSL。 (为此我修改了程序以接受非 SSL 请求)。

即将进入 docker 文件 -- 它需要公开的端口,如 5000(对于非 SSL)和 5001(对于 SSL) 即将 docker 撰写文件 -- 它需要像 5000:805000:443

这样的映射

-- 它也有 URL 的环境变量,如

ASPNETCORE_URLS=https://+5001;http://+5000

-- 它也有证书路径的环境变量,如

ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx

-- 它也有证书密码的环境变量,如

ASPNETCORE_Kestrel__Certificates__Default__Password=SECRETPASSWORD

现在,当我说 docker compose up --build 它会构建项目并启动容器。 我可以通过 https://localhost:5001 和 http://localhost:5000

访问网站

现在,来到 kubernets -- 我已经使用 kompose 工具生成 kubernetes 特定的 yaml 文件 -- 我没有做任何改变。我运行命令kompose convert -f docker-compose.yaml -o ./.k8 -- 最后,我运行kubectl apply -f .k8

它启动容器但立即失败。我检查了日志,它说了以下内容:

crit: Microsoft.AspNetCore.Server.Kestrel[0]
      Unable to start Kestrel.
      Interop+Crypto+OpenSslCryptographicException: error:2006D080:BIO routines:BIO_new_file:no such file
         at Interop.Crypto.CheckValidOpenSslHandle(SafeHandle handle)
         at Internal.Cryptography.Pal.OpenSslX509CertificateReader.FromFile(String fileName, SafePasswordHandle password, X509KeyStorageFlags keyStorageFlags)
         at System.Security.Cryptography.X509Certificates.X509Certificate..ctor(String fileName, String password, X509KeyStorageFlags keyStorageFlags)
         at System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(String fileName, String password)
         at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Certificates.CertificateConfigLoader.LoadCertificate(CertificateConfig certInfo, String endpointName)
         at Microsoft.AspNetCore.Server.Kestrel.KestrelConfigurationLoader.LoadDefaultCert()
         at Microsoft.AspNetCore.Server.Kestrel.KestrelConfigurationLoader.Reload()
         at Microsoft.AspNetCore.Server.Kestrel.KestrelConfigurationLoader.Load()
         at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.BindAsync(CancellationToken cancellationToken)
         at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.StartAsync[TContext](IHttpApplication`1 application, CancellationToken cancellationToken)
Unhandled exception. Interop+Crypto+OpenSslCryptographicException: error:2006D080:BIO routines:BIO_new_file:no such file

在“It has required mapping like 5000:80 and 5000:443”中,实际上应该是5001:443(因为端口5001用于映射到https 443端口)。

基于此错误消息

"nterop+Crypto+OpenSslCryptographicException: error:2006D080:BIO routines:BIO_new_file:no such file",

证书文件似乎不存在于以下位置:/https/aspnetapp.pfx

运行 图像,使用以下 Docker 命令:

docker run -it --entrypoint sh <image name>

您将在没有 运行 入口点的情况下访问容器,执行 cd /https/,检查证书是否位于此文件夹中,如果不是,则可能是问题所在。