gpt4 book ai didi

ssl - 当 Docker compose 为 Dotnet 核心项目工作时,Kubernetes 因 SSL 错误而失败

转载 作者:行者123 更新时间:2023-12-04 22:40:08 24 4
gpt4 key购买 nike

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

  • 我有启用 WSL2 的 Windows 10 和通过 VS Code 运行的 Ubuntu。
  • 我在 VS Code 中启用了所需的插件(如 Kubernetes、Docker 等)
  • 我安装了启用了 WSL2 + Ubuntu + Kubernetes 的 Docker 桌面。
  • 我通过 Docker
  • 从本地系统 + ubuntu 获得了 ASP.Net Core 5 工作版本
  • 我有 dockerfile + docker compose 文件,并且我已经对它们进行了测试,无论是否使用 SSL 端口,并且这些都可以使用 SSL,也可以不使用 SSL。 (为此我修改了程序以接受非 SSL 请求)。

  • 来到docker文件
    -- 它需要暴露的端口,如 5000(非 SSL)和 5001(SSL)
    来到码头撰写文件
    -- 它需要像 5000:80 这样的映射和 5000: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 访问该站点
    现在,来到 Kubernetes
    -- 我已经使用 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

    最佳答案

    在“它需要像 5000:805000: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/ ,检查证书是否位于此文件夹中,如果不是这可能是问题所在。

    关于ssl - 当 Docker compose 为 Dotnet 核心项目工作时,Kubernetes 因 SSL 错误而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67814781/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com