Azure Kubernetes Service中重写规则踩坑小记录

这篇具有很好参考价值的文章主要介绍了Azure Kubernetes Service中重写规则踩坑小记录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

最近在做标准产品在不同云平台中的部署验证,有幸体验了一下微软的Azure。负责采购的运维部门这次采用了Application Gateway来搭配AKS(Azure Kubernetes Service)对外暴露服务,正好借着这个机会来体验一下Application Gateway

应用场景

  1. 域名api.demo.com指向Application Gateway的IP地址
  2. AKS内部2个Service, gateway-servicebackend-service分别需要通过Application Gateway对外暴露。
  3. /gateway/指向gateway-service, 然后/backend/指向backend-service。而且两个Service都没有context-path,所以需要做一个Rewrite重写URI到Service的根目录上。

定义重写集

打开AKS对应的应用程序网关设置 > 重写。选择添加重写集。在1. 名称和关联这个Tab上只需要填写名称这项即可(名称后面在做ingress时需要使用), 关联的传递规则不需要选择。2. 重写规则配置里添加一个重写规则,然后填上重写规则的名称,并添加条件(默认新建重写规则时,只会生成操作,不会生成条件)

条件做如下设置

  • 要检查的变量类型 : 服务器变量
  • 服务器变量: request_uri
  • 区分大小写:
  • 运算符: 等号(=)
  • 要匹配的模式: /(gateway|backend)/?(.*)

操作做如下设置

  • 重写类型: URL
  • 操作类型: 设置
  • 组件: URL路径和URL查询字符串
  • URL路径值: /{var_request_uri_2}
  • 重新计算路径映射: 不选中
  • URL查询字符串值: 留空不设值

特殊说明

操作里的URL路径值不能使用正则表达式GROUP替换组,例如$1$2之类的。Azure自己定义了一套对应的替换组命名规则。具体可以参考这个网页使用应用程序网关重写 HTTP 标头和 URL。

另外一个需要注意一点,如果在条件里选择了服务器变量request_uri的时候,注意这个request_uri是完整的原始请求URI(携带了查询参数)。例如: 在请求http://api.demo.com/gateway/search?foo=bar&hello=world中,request_uri的值将为/gateway/search?foo=bar&hello=world。由于request_uri里包含了查询参数,所以在操作组件中建议勾选URL路径和URL查询字符串。如果只选择URL路径的情况下可能出现无法预期的错误。以我们上述的配置来说明。

对象URL: http://api.demo.com/gateway/search?foo=bar&hello=world

组件 URL路径和URL查询字符串 URL路径
结果 /search?foo=bar&hello=world /search?foo=bar&hello=world?foo=bar&hello=world

ACK的Ingress设置

当选择了Application Gateway作为对外暴露Service的方式时,Kubernetes集群里(kube-system命名空间里)多一个Application Gateway Ingress Controller(Azure工单时通常会简称为agic)的Deployment,所以对外暴露服务时可以像传统nginx ingress controller一样添加一个Ingress对象即可(甚至配置也和ngic大致相同,只是多了2个annotations)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    # 这里指定重写规则集(不是重写规则的名字)
    appgw.ingress.kubernetes.io/rewrite-rule-set: rule-backend
    # 指定说明你这里ingress的类型是agic
    kubernetes.io/ingress.class: azure/application-gateway
  name: backend-ingress
  namespace: default
spec:
  rules:
  - host: api.demo.com
    http:
      paths:
      - backend:
          service:
            name: gateway-service
            port:
              number: 8080
        path: /gateway/
        pathType: Prefix
      - backend:
          service:
            name: backend-service
            port:
              number: 8080
        path: /backend/
        pathType: Prefix

总结

由于微软云这块文档有部分缺失,导致在配置这块花了一点时间去排查,甚至开了工单。总结下来Ingress的配置主要是根据请求路径路由到对应的Service,重写规则集才是实际负责根据正则来进行匹配重写。文章来源地址https://www.toymoban.com/news/detail-731202.html

到了这里,关于Azure Kubernetes Service中重写规则踩坑小记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Microsoft Azure 的1024种玩法】五十五.Azure speech service之通过JavaScript快速实现文本转换为语音

    文本转语音可使用语音合成标记语言 (SSML) 将输入文本转换为类似人类的合成语音,本篇文档主要介绍了如何通过JavaScript 的语音SDK实现文本转换为语音的实践操作 【Microsoft Azure 的1024种玩法】一.一分钟快速上手搭建宝塔管理面板 【Microsoft Azure 的1024种玩法】二.基于Azure云平

    2024年02月09日
    浏览(65)
  • 使用Servlet完成单表的增删改查功能以及使用模板方法设计模式解决类爆炸问题(重写service模板方法)

    开发前的准备 导入sql脚本创建一张部门表 通过绑定属性资源配置文件的方式创建JDBC的工具类utils/DBUtil 分析系统的功能: 只要这个操作连接了数据库,就表示一个独立的功能 查看部门列表 , 新增部门 , 删除部门 , 查看部门详细信息 , 跳转到修改页面(动态的从数据库中获取信

    2024年02月10日
    浏览(46)
  • 踩坑!WSL2报错:docker unrecognized service

    WSL2安装Docker后执行 sudo service docker start 报错:docker: unrecognized service实录 在WSL中安装Docker要使用命令: 即原生linux docker,若使用以下命令安装则会提示unrecognized service。。。 安装过程见 [Install Docker in WSL](https://blog.csdn.net/weixin_36815313/article/details/107641262)

    2024年02月15日
    浏览(34)
  • 【云原生 • Kubernetes】kubernetes 核心技术 - Service

    1. Service 的定义 Service 是 Kubernetes 的核心概念之一,创建一个 Service 可以为一组具有相同功能的容器应用提供一个统一的入口地址,并且将请求负载分发到后端的各个容器应用上。 完整 yaml 格式的 Service 定义文件如下: 2. Service 的基本用法 一般情况下,对外部提供服务的应用

    2024年02月01日
    浏览(39)
  • 【Azure 媒体服务】Media Service的编码示例 -- 创建缩略图子画面的.NET代码调试问题

    在中国区Azure上,使用Media Service服务,想要使用.NET的代码来对上传视频创建缩略图(Thumbnail) 。 通过官网文档(https://docs.azure.cn/zh-cn/media-services/latest/samples/samples-encoding-reference#create-a-thumbnail-sprite)下载.NET示例,配置 appsettings.json 中的参数,运行却出现(Azure.Identity.Authentication

    2024年02月03日
    浏览(38)
  • Kubernetes Service的过程

    在了解Service之前,需要先了解一些额外的知识: 命令: ip route show table all DNAT IPVS和iptables 基础的网络知识(网关,网段或子网,转发) 1. 命令 ip route show table all 这条命令会列出主机内所有的路由.内容展示包含了对应的网段或者IP,要通过那个虚拟设备发送出去.示例: 摘取一条,比如:

    2024年02月16日
    浏览(32)
  • Kubernetes(k8s)服务service:service的发现和service的发布

    目录 一.系统环境 二.前言 三.Kubernetes service简介 四.使用hostPort向外界暴露应用程序 4.1 创建deploy 4.2 使用hostPort向外界暴露pod的端口 五.使用service服务向外界暴露应用程序 5.1 使用service服务向外界暴露pod 5.1.1 创建service服务 5.1.2 测试svc的负载均衡 六.service服务的发现 6.1 使用

    2024年02月08日
    浏览(55)
  • 图解Kubernetes的服务(Service)

    pod 准备: 不要直接使用和管理Pods: 当使用ReplicaSet水平扩展scale时,Pods可能被terminated 当使用Deployment时,去更新Docker Image Version,旧Pods会被terminated,然后创建新Pods Kubernetes 中 Service 是 将运行在一个或一组 [Pod]上的网络应用程序公开为网络服务的方法。 Kubernetes 中 Service 的

    2024年02月03日
    浏览(34)
  • Kubernetes 应用故障排除—调试 Service

    对于新安装的 Kubernetes,经常出现的问题是 Service 无法正常运行。你已经通过 Deployment(或其他工作负载控制器)运行了 Pod,并创建 Service , 但是当你尝试访问它时,没有任何响应。此文档有望对你有所帮助并找出问题所在。 对于这里的许多步骤,你可能希望知道运行在集群

    2024年02月13日
    浏览(40)
  • Kubernetes.Service—使用源 IP

    运行在 Kubernetes 集群中的应用程序通过 Service 抽象发现彼此并相互通信,它们也用 Service 与外部世界通信。 本文解释了发送到不同类型 Service 的数据包的源 IP 会发生什么情况,以及如何根据需要切换此行为。 本文使用了下列术语: NAT 网络地址转换 Source NAT 替换数据包上的

    2024年02月15日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包