首页 > 解决方案 > 将流量重定向到外部 url

问题描述

基于评论的更新:

假设有一个 API 托管在另一个 GCP 项目中 @ hello.company1.com ......

我想有一种可能性,当 some1 访问一个 url abc.company.com 时,它们是来自 hello.company1.com 的服务器流量,类似于 API 网关......

它可以通过 API 网关轻松完成,我只是想弄清楚是否可以使用 K8S 服务和入口。


我已将 Cloud DNS 区域创建为 abc.company.com

当有人访问 abc.company.com/google 时,我希望将请求转发到外部 url,比如说 google.com

这可以通过创建外部名称类型的服务和主机名为 abc.company.com 的入口来实现吗

kind: Service
apiVersion: v1
metadata:
  name: test-srv
spec:
  type: ExternalName
  externalName: google.com

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: test-ingress
spec:
  rules:
  - host: abc.company.com
  - http:
      paths:
      - path: /google
        backend:
          serviceName: test-srv

标签: google-cloud-platformgoogle-kubernetes-enginegoogle-cloud-dns

解决方案


可以实现您想要的,但是您需要使用Nginx Ingress来做到这一点,因为您需要使用特定的注释 - nginx.ingress.kubernetes.io/upstream-vhost

这个Github issue基于storage.googleapis.com.

apiVersion: v1
kind: Service
metadata:
  name: google-storage-buckets
spec:
  type: ExternalName
  externalName: storage.googleapis.com
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: proxy-assets-ingress
  annotations:
    kubernetes.io/ingress.class: nginx-ingress
    nginx.ingress.kubernetes.io/rewrite-target: /[BUCKET_NAME]/[BUILD_SHA]
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
    nginx.ingress.kubernetes.io/upstream-vhost: "storage.googleapis.com"
spec:
  rules:
  - host: abc.company.com
    http:
      paths:
      - path: /your/path
        backend:
          serviceName: google-storage-buckets
          servicePort: 443

取决于您的需要,如果您要在非 https 上使用它,则需要更改servicePort80并删除 annotation nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"

有关更多详细信息,您可以查看其他类似Stackoverflow 问题

请记住不要-spec.rules.hostspec.rules.http一个清单中使用。如果您的配置中没有,您应该-只使用 with 。httphost


推荐阅读