Kubernetes外部名称服务添加标头

5
TLDR:我正在使用AKS运行kubernetes集群。我创建了一个外部名称服务来代理到外部地址。我想在请求中添加'Host'标头。我应该如何操作?
更多背景信息:我有一个处理所有传入流量的入口控制器。我想将一部分流量(基于路由)路由到外部Azure函数。我已经设置了一个具有我的Azure函数主机名的ExternalName服务,并将流量路由到它。但是,由于Microsoft处理路由到其功能的方式,需要在标头中提供正确FQDN的'Host'值。
我不想让发送原始请求的人在标头中包含这个值,因此当流量被代理到Azure函数时,我想代表他们添加它。
以下是我的服务文件:
kind: Service
apiVersion: v1
metadata:
  name: azure-function-proxy-service
  labels:
    app: proxy-service
spec:
  type: ExternalName
  externalName: azure-function.azurewebsites.net

以下是相关的入站规则代码:

- host: hostto.proxy.net
http:
  paths:
  - path: /route/to/proxy
    backend:
      serviceName: azure-function-proxy-service
      servicePort: 80
2个回答

3
我发现我真正想做的是在请求通过我的入口控制器时修改标题。我发现最好的选择是使用nginx.ingress.kubernetes.io/configuration-snippet,但它没有给我想要的细粒度控制。
最终,我不得不启动一个额外的nginx实例来代理请求,以便我可以完全控制nginx配置。

0

我认为你可以在ingress-nginx中使用Canary功能。 如果你添加注释nginx.ingress.kubernetes.io/canary: "true",你就能够使用以下规则。

  • nginx.ingress.kubernetes.io/canary-by-header:用于通知Ingress将请求路由到金丝雀Ingress中指定的服务的标头。当请求标头设置为always时,它将被路由到金丝雀服务。当标头设置为never时,它永远不会被路由到金丝雀服务。对于任何其他值,标头将被忽略,并按优先级与其他金丝雀规则进行比较。

  • nginx.ingress.kubernetes.io/canary-by-cookie:用于通知Ingress将请求路由到金丝雀Ingress中指定的服务的cookie。当cookie值设置为always时,它将被路由到金丝雀服务。当cookie设置为never时,它永远不会被路由到金丝雀服务。对于任何其他值,cookie将被忽略,并按优先级与其他金丝雀规则进行比较。

  • nginx.ingress.kubernetes.io/canary-weight:基于整数(0-100)的随机请求百分比,应路由到金丝雀Ingress中指定的服务。权重为0意味着此金丝雀规则不会向金丝雀Ingress中的服务发送任何请求。权重为100表示所有请求都将发送到Ingress中指定的替代服务。

您还可以阅读这篇文章使用ingress-nginx进行金丝雀部署,其中解释了如何使用canary-weightcanary-by-header


这是一个有趣的功能,但据我所知它似乎不允许我在请求通过入口控制器时插入新的标头。 - Dillon Courts
你有研究过 nginx.ingress.kubernetes.io/configuration-snippet 吗? - Crou
看起来很有前途!我会去看一下。谢谢! - Dillon Courts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接