Ingress在k8s中的应用

        Ingressk8s平台的应用路由,是从 kuberenets 集群外网访问集群的一个入口service是将集群外部请求转发到集群内部(一个service可以对应多个podservicepod外部请求转发到pod应用内部),Ingress相当于普通应用服务中的网关\nginx。通常在Ingressyaml文件中通过annotations节点配置nginx的基础设置,如: kubernetes.io/ingress.class: nginx

1、通常路径转发设置

    在yaml文件的spec节点配置rules路由转发规则,host是设置外部访问域名,paths可设置具体的访问规则。 如图所示,服务具体的访问路径是http://community-service-ext.public-project.svc.cluster.local:19000/interface/view,外部访问路径是https://api.***.**/api/content_public/interface/view,path路径上需要加(.*),并且需要通过nginx.ingress.kubernetes.io/rewrite-target: /$2 进行路径替换,(.*)之前的请求的路径(https://api.***.**/api/content_public/)都会被http://community-service-ext.public-project.svc.cluster.local:19000/代替,最终将请求打入集群内部。

 

2、路径替换转发设置

    在实际请求过程中,需要将请求路径根据规则替换成新路径,则需要通过设置annotations节点配置 nginx.ingress.kubernetes.io/use-regex: 'true',配置nginx.ingress.kubernetes.io/server-snippet进行规则转发,当请求的paths适配的路径在nginx.ingress.kubernetes.io/server-snippet中匹配时则会替换重新转发。如图所示,需要将请求中的content路径转成community路径(因服务接口路径将原content路径改成了community,为了兼容旧服务请求需设置转发),在rewrite进行替换,注意参数为$1,获取请求的具体接口参数,同时需将/api/content_public/content/(.*)路径设置在第一条,优先匹配。真实后端服务接口存在/community/**,不存在/content/**,这样设置后/content/interface/view最终被转换成/community/interface/view,服务完美兼容旧客户端请求。

 

 

posted @ 2022-08-05 16:57  丝絮  阅读(474)  评论(0)    收藏  举报