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的连接形式
posted @ 2020-12-25 10:39  伊铭(netease)  阅读(127)  评论(0编辑  收藏  举报