问题描述
我在 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