看起来我能找到的一些资源已经过时了。以下解决方案适用于 Kubernetes v1.21.4。
重要说明:
- 所有
Ingress
注释都是必需的:
kubernetes.io/ingress.class: nginx
- 需要使用 Nginx 入口控制器。
nginx.ingress.kubernetes.io/backend-protocol: HTTPS
- 维护 HTTPS 流量服务所必需的(这在旧版本中替换/secure-backends
)。
nginx.ingress.kubernetes.io/upstream-vhost
- 必须匹配服务externalName
,从请求路径中删除主机名(例如,如果缺少主机名并通过 localhost 进行测试,可能会遇到错误:“No such bucket: localhost”)。
nginx.ingress.kubernetes.io/rewrite-target
- 将匹配的资产 URL 路径传递给服务。
path.service.port.number
Ingress 定义中的 必须匹配服务期望的任何端口(ExternalName
在我们的 HTTPS 流量的情况下为 443)。
apiVersion: v1
kind: Service
metadata:
name: do-bucket-service
spec:
type: ExternalName
externalName: <zone>.digitaloceanspaces.com
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: do-bucket-ingress
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/backend-protocol: HTTPS
nginx.ingress.kubernetes.io/rewrite-target: /<bucket>/$2
nginx.ingress.kubernetes.io/upstream-vhost: <zone>.digitaloceanspaces.com
spec:
rules:
- http:
paths:
- path: /path/to/static/assets(/|$)(.*)
pathType: Prefix
backend:
service:
name: do-bucket-service
port:
number: 443