将Http重定向到Kubernetes上承载的ASP.NET核心中的Http失败

u1ehiz5o  于 2022-11-02  发布在  Kubernetes
关注(0)|答案(2)|浏览(206)

我的asp.net核心Web应用程序在statup.cs上应用了重定向,如下所示:

app.UseHttpsRedirection();

当我在Kubernetes上托管它时,问题就出现了,在那里不会发生这种重定向。应用程序在http和https URL上都打开。

我在安装了Kali Linus的PC上的本地Kubernetes集群上托管应用程序。

这是我正在使用的入口:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: first-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  tls:
  - secretName: ssl
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: first-service
            port:
              number: 8080

上的入口打开2个端口,分别为- 80、443。
在这种情况下,应该如何进行重定向?
部署是:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: first-dep
  labels:
    app: aspnet-core-app
spec:
  replicas: 1
  selector: 
    matchLabels:
      component: web
  template:
    metadata: 
      labels:
        component: web
    spec:
      containers:
        - name: csimpleweb
          image: simpleweb
          imagePullPolicy: Never
          ports:
            - containerPort: 80

本服务为:

apiVersion: v1
kind: Service
metadata:
  name: first-service
spec:
  type: NodePort
  selector:
    component: web
  ports:
    - port: 8080
      targetPort: 80

因此,概括起来,我想问以下几点:
1.如何在k8s + ASP.NET核心中重定向工作。重定向不工作在我的情况下,我已经在应用程序上应用了重定向。
1.应该在入口处进行重定向吗?如果是这样的话,怎么做?在这种情况下,我认为我们已经从应用程序中删除了app.UseHttpsRedirection()
1.什么码头集装箱港口,其中吊舱将主机,我们必须打开和如何?
谢谢你

6tr1vspr

6tr1vspr1#

根据我的研究我发现了下面的方法。
1.当我们将ASP.NET核心应用程序托管到kubernetes时,请从该应用程序中删除重定向。
1.将重定向应用到Ingress本身。通过添加以下2行:
nginx.ingress.kubernetes.io/force-ssl-redirect: “真实”
nginx.ingress.kubernetes.io/ssl-redirect: “真实”
所以我的入口代码变成:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: first-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  tls:
  - secretName: ssl
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: first-service
            port:
              number: 8080

让我知道你的想法。如果你有一个更好的答案,请添加一个新的答案的问题。

bf1o4zei

bf1o4zei2#

我不是Kubernetes的Maven,但入口控制器的工作似乎是充当应用程序的反向代理,并终止(最后一站)SSL连接。因此,默认情况下,K8会正确地从应用程序中拿走一些控制权。
有多个地方你可以导致http -〉https重定向。
1.内容交付网络(CDN Edge)
1.负载平衡器
1.代理Web服务器(在本例中,此处福尔斯IIS、Apache、Nginx或Kubernetes入口控制器)
1.凯斯特尔
通常,越早进行此重定向,对最终用户的响应就越快。
因此,虽然您可以允许通信量到达应用程序以处理请求,但如果可能的话,您应该更喜欢尽快完成。

相关问题