第11章 流量路由Ingress(一)

计算机软件开发 2024-10-3 01:07:45 75 0 来自 中国
Ingress是K8s集群对外袒露服务的核心方式之一,另一个方式是云产物负载平衡,下面临它的根本原理,场景化需求,获取客户端真实IP所在以及白名单机制。
11.1 根本原理

11.1.1 办理的标题

K8s集群有四种范例的服务,分别是ClusterIP、NodePort、LoadBalancer以及ExternalName。
ClusterIP范例的服务只能在集群内访问,而NodePort和LoadBalancer两种范例的服务都可以从集群外部访问。这三种服务有一个共同特点,就是理论上只能通过四层协议来访问。LoadBalancer范例的服务固然也可以设置对应负载平衡HTTP/HTTPS属性,但也只提供了简朴的署理,无法应对复杂的七层的战略路由场景。
Ingress的出现正式为了办理以上标题。Ingress的职责是将差异URL的哀求转发给差异的服务,以实现复杂路由战略。范例的Ingress组件,是基于Nginx七层署理实现的Nginx Ingress Controller。
访问www.b**k.com/bookinfo相干的信息须要路由到Bookinfo这个服务举行处理惩罚,而访问www.b**k.com/subscription相干的信息须要路由到Subscription这个服务举行处理惩罚。
11.1.2 底子用法

我们须要界说Ingress模板去实现上一节中的功能。前面的内容中分别界说了Ingress的API版本、对象范例以及元数据,而详细的具有规则在Spec中指定。
apiVersion: networking.k8s.io/vlbetal
kind: Ingress
metadata:
  name: ingress-example
  annotations:
spec:
  rules:
  - host: b**k.com
    http:
     paths:
     -path: /bookinfo
      backend:
        serviceName: service-a
        servicePort: 80
     -path: /subscription
      backend:
       serviceName: service-b
       servicePort: 80
11.1.3 设置安全路由

上一节的界说中,实现了一个HTTP协议的站点路由。然后HTTP协议是明文在网络上传输的,容易被盗取消息。大多数环境下,我们须要摆设一个安全的站点,采用HTTPS协议访问。本节将报告怎样摆设安全路由。
如果是测试环境,通常只须要自署名证书即可,详细使用有以下几个步调。
(1)使用openssl工具天生私钥和证书文件。
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyouttls.key -out tls.crt -subj "/CN=b88k.com/O=b88k.com"
(2) 创建Secret,并将私钥和证书存放在此中。
kubectl create secret tls book --key tls.key --cert tls.crt
(3) 修改Ingress模板文件,添加spec.tls设置。
apiVersion: networking.k8s.io/vlbetal
kind: Ingress
metadata:
  name: ingress-example
  annotations:
spec:
  tls:
        - host:
    - b**k.com
        secretName:b**k
  rules:
  - host:b**k.com
    http: 
     paths:
     -path: /bookinfo
      backend:
       serviceName: service-a
       servicePort: 80
     -path: /subscription
      backend:
       serviceName: service-b
       servicePort: 80
创建或者更新Ingress-example后,证书就会被Ingress控制器设置到对应的七层署理中。如果是在正式环境中,通常须要CA申请证书,并拿到私钥文件(tls.key)和证书链文件(tls.pem),这是可以跳过上面的第一步,只实行第2步和第3步即可。
关于安全路由的设置,须要注意以下几点:
tls.key和tls.crt字段名称不能更改。
Secret必须和Ingress在同一个定名空间,否则证书设置会失败。
tls.key、tls.crt存放的实在是key和crt的Base64编码文件,在Linux环境中可以用Base64解码对比证书信息。
11.1.4 全局设置和局部设置

有些场景下,须要对Ingress做更复杂的设置,比方让访问日志打印出统计Web性能,或将URL重定向到根路径。
对于通例的Nginx来说,只须要修改nginx.conf文件即可。然而对K8s来说,由于Nginx Ingress Controller封装了Nginx,以是我们不能直接修改Nginx的设置。
精确的做法是,通过在Ingress的编排文件中添加Annotation的方式设置局部参数,或者通过nginx-configuration这个ConfigMap的方式来设置全局参数。
11.1.5 实现原理


在Ingress的使用过程中,常常会碰到一些标题,比如客户端访问偶然报:“502”或“504”错误、域名证书设置不见效、获取不到客户端真实IP所在等。
相识Ingress路由的实现原理,对于办理Ingress各种标题十分有资助。本节将讲授Ingress是怎样实现复杂的七层路由战略的。
以阿里云的Ingress组件为例,Ingress可以分为三个部分,分别是入口SLB(由Nginx-ingress-lb这个Service创建)、控制器以及Nginx署理,如下图所示。
2.png Ingress的实现包罗了两部分内容,一个是Controller,即Ingress控制器,另一个是Nginx署理。当创建一个Ingress对象的时间,控制器会作为Ingress对象和Nginx之间的翻译官,把Ingress中界说的路由设置转换为Nginx的设置。
如果Ingress界说有错误,翻译工作会失败,导致最新的规则没有办法下发到Nginx里。控制器日志的Nginx的Access/Error日志,都会汇总到Nginx
Ingress Controller这个Pod的尺度输出,可以从Pod的尺度输出检察控制器的日志或者Nginx的访问日志。
一样平常环境下,如果须要检察见效的Nginx设置,我们可登录到Nginx Ingress Controller容器里,检察设置文件/etc/nginx/nginx.conf。
为了镌汰对Nginx设置高频率加载如许的使用,Nginx Ingress Controller引入了Lua模块。Lua模块可以帮忙Nginx低“本钱”地更新Upstream,以克制此类操尴尬刁难业务的影响。
在Ingress控制器里获取Lua设置的方法如下。
(1)进入Pod。
kubectl -n kube-system exec -ti nginx-ingress-controller-7d7c69b5b8-d7qxw /bin/bash
(2)检察设置
curlhttp://127.0.0.1:10246/configuration/backends
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-10-18 16:44, Processed in 0.145355 second(s), 35 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表