ingress-nginx 隐藏域重定向和基于路径的路由

问题描述

我在 kubernetes 上使用 ingress-Nginx。我需要将到 / 的传入连接重定向到托管在 webflow 上的博客并执行基于路径的路由。

Webflow 提供了一个类似于 website123.webflow.com 的域。我想在不执行重定向的情况下为博客提供服务。我想屏蔽 webflow 域并使用认值。

这是我到目前为止所带来的:

---
apiVersion: v1
kind: Service
Metadata:
  name: homepage
spec:
  externalName: website123.webflow.io
  type: ExternalName
---
apiVersion: extensions/v1beta1
kind: Ingress
Metadata:
  annotations:
    external-dns.alpha.kubernetes.io/hostname: my.custom.domain.com
    kubernetes.io/ingress.class: Nginx
    Nginx.ingress.kubernetes.io/load-balance: ewma
    Nginx.ingress.kubernetes.io/proxy-body-size: 4G
    Nginx.ingress.kubernetes.io/upstream-vhost: website123.webflow.io
    service.beta.kubernetes.io/do-loadbalancer-hostname: my.custom.domain.com
  labels:
    source: github
  name: http
  namespace: panattt1
spec:
  rules:
  - host: my.custom.domain.com
    http:
      paths:
      - path: /api
        backend:
          serviceName: http
          servicePort: 80
      - path: /images
        backend:
          serviceName: http
          servicePort: 80
      - path: /app
        backend:
          serviceName: http
          servicePort: 80
      - path: /game
        backend:
          serviceName: http
          servicePort: 80
      - path: /mapmaker
        backend:
          serviceName: http
          servicePort: 80
      - path: /dashboard
        backend:
          serviceName: http
          servicePort: 80
      - path: /
        backend:
          serviceName: homepage
          servicePort: 80
  tls:
  - hosts:
    - my.custom.domain.com

上述解决方案无法如我所愿。浏览器中的网址从my.custom.domain.com变成了website123.webflow.io,这不是我想要的。

我相信主机标头到达的路径不是 /,这是不理想的。尚未测试。

如果删除 Nginx.ingress.kubernetes.io/upstream-vhost,我会从 webflow 的 CDN 收到错误消息,因为 $host 标头使用了不可用的域。添加自定义域会产生相同的错误

我是否可以使用 ingress-Nginx 优雅地处理这种情况?

解决方法

这对我有用,没有诸如 upstream-vhost 之类的注释

kind: Service
metadata:
  name: blog-service
  namespace: panattt1
spec:
  externalName: website123.webflow.io
  ports:
  - port: 8001
    protocol: TCP
    targetPort: 443
  type: ExternalName

---

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    ingress.kubernetes.io/force-ssl-redirect: "true"
    ingress.kubernetes.io/ssl-redirect: "true"
    kubernetes.io/ingress.class: nginx
    kubernetes.io/tls-acme: "true"
  name: blog-ingress
  namespace: panattt1
spec:
  rules:
  - host: my.custom.domain.com
    http:
      paths:
      - backend:
          serviceName: blog-service
          servicePort: 8001
        path: /
  tls:
  - hosts:
    - my.custom.domain.com