zoukankan      html  css  js  c++  java
  • kubernets之Ingress资源

    一  Ingress集中式的kubernets服务转发控制器

      1.1  认识Ingress的工作原理

    注意:图片来源于kubernets in action一书,如若觉得侵权,请第一时间联系博主进行删除

    • 客户端向Ingress服务挂载的IP地址进行发起连接请求
    • Ingress在收到服务之后会根据请求的主机名和路径转发到相应的服务
    • 服务收到请求之后会去查找它相关的Endpoints列表
    • 之后随机的向Endpoints列表的任一pod进行连接

      

      1.2  创建一个Ingress定义

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: kubia
    spec:
      rules:
      - host: ex.example.com
        http:
          paths:
          - path: /
            backend:
              serviceName: kubia-nodeport
              servicePort: 80 
    • 只对spec的内容作出相关的解释和说明,其余的apiversion,kind,以及metadata很显而易见
    • spec有个rules的字段,里面是一个数组,可以纵向的为Ingress添加主机以及路径对应的关联服务以及端口
    • 接着主机下面的path也是一个列表,同样支持同一台主机下面不同路径的关联服务的横向扩展

      1.3 向Ingress以多主机的形式横向扩展服务,服务资源定义如下所示

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: kubia-mulit-host
    spec:
      rules:
      - host: foo.example.com
        http:
          paths:
          - path: /
            backend:
              serviceName: foo
              servicePort: 80
      - host: bar.example.com
        http:
           paths: /
           - path:
             backend:
               serviceName: bar
               servicePort: 80
    • 该定义下的Ingress,会将foo.example.com以及bar.example.com的流量分别导向集群内部相关的服务

      1.4 向Ingress以单主机多path的形式横向扩展服务,服务资源定义如下所示

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: kubia-mulit-path
    spec:
      - host: foo.example.com
        http:
           paths:
           - path: /bar
             backend:
                 serviceName: bar
                 servicePort: 80
           - path: /foo
             backend:
                serviceName: foo
                servicePort: foo
    • 该定义下的Ingress当匹配到主机之后还会继续匹配路径,当匹配到路径bar会将流量转发到bar相关的服务,同理匹配到foo路径会将流量转发到foo相关的服务

      

      1.5 以上两种情况可以同时出现在一个Ingress上面

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: kubia-mulit-path-host
    spec:
      - host: foo.example.com
        http:
           paths:
           - path: /bar
             backend:
                 serviceName: bar
                 servicePort: 80
           - path: /foo
             backend:
                serviceName: foo
                servicePort: 80
      - host: bar.example.com
        http:
           paths:
           - path: /bar
             backend:
                 serviceName: sub_bar
                 servicePort: 80
           - path: /foo
             backend:
                serviceName: sub_foo
                servicePort: 80
    • 这里是上面两种情况的综合表现,并且在现实的生产环境中,往往都是以这种形式出现,需要各位读者细细品觉

    二  配置ingress的TLS传输

      2.1 我们已经知道了HTTP请求是如何转发的,但是对于HTTPS的请求呢?

        当客户端创建到Ingress控制器的TLS连接时,控制器将终于TLS连接,客户端和控制器之间的通信是加密的,但是控制器到后端的通信

    则不需要配置,也不需要支持TLS。例如运行web服务的pod不需要支持TLS,可以让Ingress控制器来处理TLS请求,这么做的前提需要将证书和私钥添加到Ingress资源里面

    这种资源kubernets里面提供Secret加以存储

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: EX-ingress-TLS
    spec:
      tls:
      - hosts:
        - kubia.example.com
        secretName: tls-secret
      rules:
      - host: kubia.example.com
        http:
          paths:
          - path: /
            backend:
              serviceName: kubia-nodeport
              servicePort: 80 
    • 如此该Ingress就支持了HTTPS的连接形式
  • 相关阅读:
    1020 Tree Traversals
    1021 Deepest Root
    1022 Digital Library
    1023 Have Fun with Numbers
    1024 Palindromic Number
    1025 PAT Ranking
    1026 Table Tennis
    面向对象知识点梳理篇一
    面向对象知识点梳理篇二
    logging模块
  • 原文地址:https://www.cnblogs.com/wxm-pythoncoder/p/14187750.html
Copyright © 2011-2022 走看看