将流量重定向到外部 url
Redirecting traffic to external url
根据评论更新:
假设在另一个 GCP 项目中有一个 API hosted @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
有可能实现你想要的,但是你需要使用 Nginx Ingress to do that, as you will need to use specific annotation - nginx.ingress.kubernetes.io/upstream-vhost。
在 this 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 上使用它,您需要将 servicePort
更改为 80
并删除注释 nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
.
更多详细信息,您可以查看其他类似的Whosebug
question。
请记住不要在同一清单中的 spec.rules.host
和 spec.rules.http
中使用 -
。如果您的配置中没有 host
,则应仅将 -
与 http
一起使用。
根据评论更新:
假设在另一个 GCP 项目中有一个 API hosted @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
有可能实现你想要的,但是你需要使用 Nginx Ingress to do that, as you will need to use specific annotation - nginx.ingress.kubernetes.io/upstream-vhost。
在 this 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 上使用它,您需要将 servicePort
更改为 80
并删除注释 nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
.
更多详细信息,您可以查看其他类似的Whosebug
question。
请记住不要在同一清单中的 spec.rules.host
和 spec.rules.http
中使用 -
。如果您的配置中没有 host
,则应仅将 -
与 http
一起使用。