0

我正在尝试在 Kubernetes 中使用Ingressand ExternalNameService 将流量路由到外部存储服务(DigitalOcean Spaces) - 但无论我尝试什么,我都会收到某种形式的 http 错误。

我尝试过的事情:

如何配置 K8s 入口/服务以将入口请求定向example.com/static到存储桶(例如<zone>.digitaloceanspaces.com/<bucket-name>/<path>/<object>)?

4

1 回答 1

1

看起来我能找到的一些资源已经过时了。以下解决方案适用于 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.numberIngress 定义中的 必须匹配服务期望的任何端口(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
于 2021-09-28T17:02:51.213 回答