• kubernetes Ingress


    1、Ingress

    在Kubernetes中,服务和Pod的IP地址仅可以在集群网络内部使用,对于集群外的应用是不可见的。为了使外部的应用能够访问集群内的服务,在Kubernetes中可以通过NodePort和LoadBalancer这两种类型的服务,或者使用Ingress。Ingress本质是通过http代理服务器将外部的http请求转发到集群内部的后端服务。Kubernetes目前支持GCE和nginx控制器;另外,F5网络为Kubernetes提供了F5 Big-IP控制器。通过Ingress,外部应用访问群集内容服务的过程如下所示。

    Ingress控制器通常会使用负载均衡器来负责实现Ingress,尽管它也可以通过配置边缘路由器或其它前端以HA方式处理流量。

    2、Ingress配置文件

    下面是Ingress YAML配置文件的示例:

    apiVersion: extensions/v1beta1 
    kind: Ingress 
    metadata: 
      name: test-ingress 
      annotations: nginx.ingress.kubernetes.io/rewrite-target: / 
    spec: 
      rules: 
      - http: 
        paths: 
        - path: /testpath 
          backend: 
            serviceName: test 
            servicePort: 80
    • 1-6行:Ingress YAML文件中的1-6行与其它的Kubernetes配置文件一样,需要apiVersion, kind和metadata字段。此示例定义了名称为test-ingress的Ingress。
    • 7-9行:Ingress规格具有配置负载均衡器或代理服务器所需的所有信息。最重要的是,它包含与所有传入请求相匹配的规则列表。目前,Ingress资源仅支持http规则。
    • 10-11行:每个http规则都包含以下信息:一个主机(例如:foo.ba.com,在这个例子中为*),一个路径列表(例如:/testpath),每个路径都有一个相关的后端(test:80)。在负载均衡器将业务引导到后端之前,主机和路径都必须匹配传入请求的内容。
    • 12-14行:后端是服务:端口(test:80)组合。Ingress流量通常被直接发送到与后端相匹配的端点。

    3、Ingress类型

    3.1 代理单一服务

    Kubernetes可以使用LoadBalancer和NodePort类型的服务暴露服务,也可以通过一个Ingress来实现。下面是名称为test-ingress的Ingress YAML文件,它将对外代理名称为testsvc的服务。

    apiVersion: extensions/v1beta1 
    kind: Ingress 
    metadata: 
      name: single-ingress 
      annotations: nginx.ingress.kubernetes.io/rewrite-target: / 
    spec: 
      rules: 
      - host: foo.bar.com 
        http: 
          paths: 
          - path: /foo 
            backend: 
              serviceName: s1 
              servicePort: 80

    通过kubectl create -f创建上述的Ingress,在创建后可以通过kubectl get ing的命令获取Ingress的列表信息:

    $ kubectl get ing 

    NAME RULE BACKEND ADDRESS

    single-ingress –s1:80 107.178.254.228

    3.2 代理多个服务

    如前所述,在kubernetes 中Pod的IP地址只能对群集内的其它的应用可见。因此,如果需要接受集群外部的流量,并将其代理到集群中后端服务。在此示例中,通过foo.bar.com(IP地址为:178.91.123.132)主机作为代理服务器。当路径为http://foo.bar.cm:80/foo时,将会访问后端的s1服务;当路径为http://foo.bar.cm:80/bar时,将会访问后端的s2服务。

    foo.bar.com -> 178.91.123.132 -> / foo s1:80 / bar s2:80

    针对上述场景,Ingress的YAML配置文件如下所示:

    apiVersion: extensions/v1beta1 
    kind: Ingress 
    metadata: 
      name: mult-ingress 
      annotations: nginx.ingress.kubernetes.io/rewrite-target: / 
    spec: 
      rules: 
      - host: foo.bar.com 
        http: 
          paths: 
          - path: /foo 
            backend: 
              serviceName: s1 
              servicePort: 80 
          - path: /bar 
            backend: 
              serviceName: s2 
              servicePort: 80

    通过kubctl create -f命令创建上述的Ingress:

    $ kubectl get ing 

    NAME RULE BACKEND ADDRESS

    mult-ingress – foo.bar.com /foo s1:80 /bar s2:80

    默认后端:没有规则的入口,就像前一节中所示的那样,会将所有的流量发送到一个默认的后端。通过指定一组规则和默认后端,可以使用相同的技术来告诉负载均衡器,可以在哪里能够找到网站的404页。如果在Ingress中没有与请求头中主机相匹配的主机,并且/或者没有与请求的URL相匹配的路径,那么路由将被路由到默认的后端

  • 相关阅读:
    springboot:集成fastjson(教训)
    记一次 SpringBoot2.x 配置 Fastjson 的坑--修正版
    国密开源代码
    国产加密SM3算法java实现
    国密算法Java代码的标准实现
    sm2,sm3,sm4国密算法的纯c语言版本,使用于任何嵌入式平台
    samtools pileup mpileup Format
    mormot multipart上传文件
    浅谈软件项目实施
    Linux CPU占用率监控工具小结
  • 原文地址:https://www.cnblogs.com/Su-per-man/p/11352851.html
Copyright © 2020-2023  润新知