Kubernetes ExternalName服务添加标题

时间:2018-12-05 18:22:51

标签: kubernetes kubernetes-ingress kubernetes-service

TLDR:我正在使用AKS运行kubernetes集群。我创建了一个外部名称服务以代理到一个外部地址。我想向请求添加“主机”标头。我应该怎么做?

有关更多上下文,我有一个处理所有传入流量的入口控制器。我想将该流量的子集(基于路由)路由到外部Azure功能。我已使用Azure函数的主机名设置了ExternalName服务,并将流量路由到该服务。但是,由于Microsoft处理其功能路由的方式,标头中需要带有正确FQDN的“主机”值。

我不想让发送原始请求的任何人都将其包含在标头中,因此当流量被代理到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 个答案:

答案 0 :(得分:0)

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

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

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

  •   
  • nginx.ingress.kubernetes.io/canary-weight:应被路由到canary Ingress中指定的服务的随机请求的整数百分比(0-100)。权重0表示此Canary规则不会在Canary入口中将任何请求发送到服务。权重为100表示​​所有请求都将发送到Ingress中指定的替代服务。

  •   

您还可以阅读本文canary deployment with ingress-nginx,其中介绍了如何使用canary-weightcanary-by-header

答案 1 :(得分:0)

我发现我真正想做的是修改请求的标头,使其通过我的入口控制器。我发现最好的选择是nginx.ingress.kubernetes.io/configuration-snippet,但它并没有给我想要的精细控制。

最终,我不得不站起一个额外的nginx实例来代理请求,以便可以完全控制nginx的配置。