• Ingress


    Ingresss是k8s集群中的一个API资源对象,扮演边缘路由器(edge router)的角色,也可以理解为集群防火墙、集群网关,可以自定义路由规则来转发、管理、暴露一组Pod。
     
    kubernetes处理这种场景时,涉及到三个组件:
    1、反向代理web服务器
    负责拦截外部请求,一般是以Deployment或DeamonSet的方式部署到kubernetes集群中的Nginx、Apache等
    通常以NodePort或HostNetwork方式对k8s之外暴露
    由于所在主机IP不确定,因此一般需要添加约束让其运行在固定的一批主机上,并在上层添加负载均衡
    2、Ingress controller
    实时感知Ingress路由规则集合的变化,再与apiserver交互,获取Service、Pod在集群中的IP等信息,然后发送给反向代理web服务器,刷新其路由配置信息
     
    常用ingress controller包括:
    ①Kubernetes社区发布的ingress-nginx和Nginx公司发布的kubernetes-ingress
    使用nginx作为代理,但貌似nginx和Ingress controller在一个Pod里
     
    使用traffic proxy进行代理
    还提供了友好的控制面板和监控界面,不仅可以方便地查看Traefik根据Ingress生成的路由配置信息,还可以查看统计的一些性能指标数据,如:总响应时间、平均响应时间、不同的响应码返回的总次数等。
    Traefik还支持丰富的annotations配置,可配置众多出色的特性,例如:自动熔断、负载均衡策略、黑名单、白名单
     
    3、Ingress
    定义路由规则集合。
    示例:
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: name-virtual-host-ingress-no-third-host
    spec:
      IngressClassName: xx
      rules:
      - host: first.bar.com
        http:
          paths:
          - pathType: Prefix
            path: "/"
            backend:
              service:
                name: service1
                port:
                  number: 80
      - host: second.bar.com
        http:
          paths:
          - pathType: Prefix
            path: "/"
            backend:
              service:
                name: service2
                port:
                  number: 80
      - http:
          paths:
          - pathType: Prefix
            path: "/"
            backend:
              service:
                name: service3
                port:
                  number: 80
    (1)IngressClassName用于指定一个IngressClass:
    apiVersion: networking.k8s.io/v1
    kind: IngressClass
    metadata:
      name: external-lb
    spec:
      controller: example.com/ingress-controller
      parameters:
        apiGroup: k8s.example.com
        kind: IngressParameters
        name: external-lb
        namespace: external-configuration
        scope: Namespace/Cluster
    将IngressClass的annotation添加ingressclass.kubernetes.io/is-default-class:true,可以将其设置为集群默认IngressClass,没有指定IngressClass的Ingress都会使用它
    (2)每条rule=host(可选)+IngressRuleValue
    host必须为域名,即必须通过{域名}:{反向代理服务器对外暴露的端口}访问反向代理服务器
    如果没有DNS,则需要在访问方的hosts文件中添加反向代理服务器所在主机IP-域名的映射关系,
    host一旦配置为某个域名(或使用如*.foo.com这样的通配符匹配一批域名),则这条rule仅适用于访问该域名的请求
     
    IngressRuleValue目前只有HTTPIngressRuleValue一种,由若干HTTPIngressPath组成,每个HTTPIngressPath包括:
    • path
    • pathType
    path的匹配规则,有以下三种:
        ImplementationSpecific:对于这种路径类型,匹配方法取决于 IngressClass。
        Exact:精确匹配 URL 路径,且区分大小写。
        Prefix:基于以 / 分隔的 URL 路径前缀匹配,此时path可以形如“/, /aaa, /aaa/bbb”
    • backend
    除了可以是svc,还可以是:
                backend:
                  resource:
                    apiGroup: k8s.example.com
                    kind: StorageBucket
                    name: icon-assets
     
    综上,该Ingress意味着:所有访问first.bar.com的流量转向Service1,所有访问second.bar.com的流量转向Service2,请求头里没有域名的流量转向Service3
     
    进行https卸载
    首先创建Secret:
    apiVersion: v1
    kind: Secret
    metadata:
      name: testsecret-tls
      namespace: default
    data:
      tls.crt: base64 编码的 cert
      tls.key: base64 编码的 key
    type: kubernetes.io/tls
    在Ingress中配置tls:
    spec:
      tls:
      - hosts:
          - https-example.foo.com
        secretName: testsecret-tls
    这样,ingress与service之间的连接就从https变为了http
  • 相关阅读:
    BZOJ 2738 矩阵乘法(整体二分+二维树状数组)
    BZOJ 1430 小猴打架(prufer编码)
    BZOJ 2818 Gcd(莫比乌斯反演)
    BZOJ 4403 序列统计(Lucas)
    BZOJ 3083 遥远的国度(树链剖分+线段树)
    BZOJ 2049 [Sdoi2008]Cave 洞穴勘测(动态树)
    BZOJ 3282 Tree(动态树)
    BZOJ 3239 Discrete Logging(BSGS)
    BZOJ 2683 简单题(CDQ分治+树状数组)
    BZOJ 4327 JSOI2012 玄武密码(后缀自动机)
  • 原文地址:https://www.cnblogs.com/yangyuliufeng/p/14900719.html
Copyright © 2020-2023  润新知