我已使用 Microsoft 登录创建了一个 .NET Core 微服务,如此处所述。当在本地或本地 Docker 容器中运行它时,一切都按预期运行。但是,在 EKS 中运行时,我在日志中收到一条警告消息:
无法确定重定向的 https 端口。
此警告如下图所示,这也表明我还检查了使用了哪些端口号(http 仅使用 80)。如果
netstat -tulp
能够显示 https 的端口号,我会很高兴,因为这样我就可以在应用程序设置中设置它(如 Microsoft 文档所解释的)并直接解析它。
微软文档清楚地解释了何时该做什么
中间件记录警告“无法确定 https 端口 用于重定向。”
但是这些并没有明确说明如果在所有环境中一切正常(除了在 EKS 中运行应用程序时),该怎么做。也许,我应该在我的 EKS/Kubernetes 配置中做一些事情,但我不知道该怎么做。
这是服务文件:
以下是日志中显示的警告消息:
如何解决警告消息?
我可以看到您在
app.UseHsts();
文件中使用 Startup.cs
,这将强制客户端使用 https。请参阅文档此处。
但是根据您的日志
Now listening on: http://[::]:80
,您的服务仅侦听http,而不侦听https。
也许你可以试试这个
app.UseHsts();
并仅使用http。spec.template.spec.containers.env
启用https。您的容器中需要一个服务器 tls 证书。apiVersion: apps/v1
kind: Deployment
metadata:
name: webapi
labels:
app: weather-forecast
spec:
replicas: 1
selector:
matchLabels:
service: webapi
template:
metadata:
labels:
app: weather-forecast
service: webapi
spec:
containers:
- name: webapi
image: exploredocker.azurecr.io/webapi:v1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
protocol: TCP
- containerPort: 443
protocol: TCP
env:
- name: ASPNETCORE_URLS
value: https://+:443;http://+:80
- name: ASPNETCORE_Kestrel__Certificates__Default__Path
value: /https/server_cert.pfx
- name: ASPNETCORE_Kestrel__Certificates__Default__Password
value: password
确保您的应用程序实际上正在侦听配置中端口上的 HTTPS 连接:
targetPort: 9377
,nodePort: 30098
这个其他类似的问题可能有助于解决您的设置的一些问题: 通过 http 和 https 访问 Kubernetes 上的 .NET Core 应用程序。如果这些不是您的设置问题,那么 yip102011 的 answer 很好。