如何配置K8s Ingress将请求路由至DigitalOcean Bucket静态资源
步骤1:创建ExternalName类型Service
首先配置Service指向DigitalOcean Spaces的域名,示例配置如下:
apiVersion: v1 kind: Service metadata: name: do-spaces-svc namespace: default spec: type: ExternalName externalName: <你的区域>.digitaloceanspaces.com # 示例值:nyc3.digitaloceanspaces.com ports: - name: https port: 443 protocol: TCP targetPort: 443
步骤2:配置Ingress规则
核心需要处理路径前缀重写、上游Host头修正、上游传输协议指定三个关键点,示例配置如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: do-spaces-ingress namespace: default annotations: # 重写路径:把/static/后的路径拼到桶名后,对应目标地址格式要求 nginx.ingress.kubernetes.io/rewrite-target: /<你的桶名>/$1 # 修正发给Spaces的Host头,否则Spaces无法识别对应存储服务会返回404 nginx.ingress.kubernetes.io/upstream-vhost: <你的区域>.digitaloceanspaces.com # 指定上游用HTTPS协议,否则用HTTP请求HTTPS端口会返回502错误 nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" spec: ingressClassName: nginx # 替换为你实际使用的Ingress类名 rules: - host: example.com http: paths: - path: /static/(.*) pathType: Prefix backend: service: name: do-spaces-svc port: name: https # 如需开启HTTPS可补充下面的TLS配置段 # tls: # - hosts: # - example.com # secretName: example-com-tls
常见错误排查
- 404错误:优先检查
upstream-vhost配置是否正确、桶名是否拼写正确、目标对象是否存在、桶是否开启了对应路径的公开读权限 - 502错误:优先检查
backend-protocol是否设置为HTTPS、Service的externalName和端口配置是否正确、集群节点是否能正常解析Spaces的域名 - 403错误:检查Spaces桶是否配置了正确的CORS规则,以及对应路径的访问权限配置是否符合要求
内容的提问来源于stack exchange,提问作者1f928
相关产品推荐
相关产品推荐

