zoukankan      html  css  js  c++  java
  • rancher+kubernetes负载均衡根据路径路由服务

    一、注意(最大的坑)

    1、从0.22.0版开始,使用注释的入口定义nginx.ingress.kubernetes.io/rewrite-target与先前版本不向后兼容。在版本0.22.0及更高版本中,必须在捕获组中显式定义请求URI中需要传递到重写路径的任何子字符串。

    2、捕获组保存在编号占位符,按时间顺序,形式$1,$2... $n。这些占位符可用作rewrite-target注释中的参数。

    3、官方文档链接: https://kubernetes.github.io/ingress-nginx/examples/rewrite/

    二、kubernetes Ingress规则配置

    注意配置中的:$2 和 something(/|$)(.*)

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /$2
      name: rewrite
      namespace: default
    spec:
      rules:
      - host: rewrite.bar.com
        http:
          paths:
          - backend:
              serviceName: http-svc
              servicePort: 80
            path: /something(/|$)(.*)
    

    三、Rancher Ingress规则配置

    访问:http:/host/model01/,请求会被发送到web-server-01工作负载中

    访问:http:/host/model02/,请求会被发送到web-server-02工作负载中

    访问:http:/host/model03/,请求会被发送到web-server-03工作负载中

    配置如下:

    This example demonstrates how to use the Rewrite annotations

    Prerequisites

    You will need to make sure your Ingress targets exactly one Ingress controller by specifying the ingress.class annotation, and that you have an ingress controller running in your cluster.

    Deployment

    Rewriting can be controlled using the following annotations:

    NameDescriptionValues
    nginx.ingress.kubernetes.io/rewrite-target Target URI where the traffic must be redirected string
    nginx.ingress.kubernetes.io/ssl-redirect Indicates if the location section is accessible SSL only (defaults to True when Ingress contains a Certificate) bool
    nginx.ingress.kubernetes.io/force-ssl-redirect Forces the redirection to HTTPS even if the Ingress is not TLS Enabled bool
    nginx.ingress.kubernetes.io/app-root Defines the Application Root that the Controller must redirect if it's in '/' context string
    nginx.ingress.kubernetes.io/use-regex Indicates if the paths defined on an Ingress use regular expressions bool

    Examples

    Rewrite Target

    Attention

    Starting in Version 0.22.0, ingress definitions using the annotation nginx.ingress.kubernetes.io/rewrite-target are not backwards compatible with previous versions. In Version 0.22.0 and beyond, any substrings within the request URI that need to be passed to the rewritten path must explicitly be defined in a capture group.

    Note

    Captured groups are saved in numbered placeholders, chronologically, in the form $1$2 ... $n. These placeholders can be used as parameters in the rewrite-target annotation.

    Create an Ingress rule with a rewrite annotation:

    $ echo '
    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /$2
      name: rewrite
      namespace: default
    spec:
      rules:
      - host: rewrite.bar.com
        http:
          paths:
          - backend:
              serviceName: http-svc
              servicePort: 80
            path: /something(/|$)(.*)
    ' | kubectl create -f -
    

    In this ingress definition, any characters captured by (.*) will be assigned to the placeholder $2, which is then used as a parameter in the rewrite-target annotation.

    For example, the ingress definition above will result in the following rewrites:

    • rewrite.bar.com/something rewrites to rewrite.bar.com/
    • rewrite.bar.com/something/ rewrites to rewrite.bar.com/
    • rewrite.bar.com/something/new rewrites to rewrite.bar.com/new

    App Root

    Create an Ingress rule with a app-root annotation:

    $ echo "
    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      annotations:
        nginx.ingress.kubernetes.io/app-root: /app1
      name: approot
      namespace: default
    spec:
      rules:
      - host: approot.bar.com
        http:
          paths:
          - backend:
              serviceName: http-svc
              servicePort: 80
            path: /
    " | kubectl create -f -
    

    Check the rewrite is working

    $ curl -I -k http://approot.bar.com/
    HTTP/1.1 302 Moved Temporarily
    Server: nginx/1.11.10
    Date: Mon, 13 Mar 2017 14:57:15 GMT
    Content-Type: text/html
    Content-Length: 162
    Location: http://stickyingress.example.com/app1
    Connection: keep-alive






    https://kubernetes.github.io/ingress-nginx/examples/rewrite/
  • 相关阅读:
    Swift中函数
    Swift 中的开关语句switch在swift中的使用
    Swift 函数新特性
    Swift 学习-多线程
    安卓学习
    ios -网络
    ios 中block
    Lua 简易调试
    iOS、Cocos2dx、Unity3D下的坐标系统简介
    Lua开发过程中遇到的一些小问题
  • 原文地址:https://www.cnblogs.com/ExMan/p/13720324.html
Copyright © 2011-2022 走看看