商务英语口语网 加入收藏  -  设为首页
您的位置:商务英语口语网 > 英语词汇 > 正文
k8s-ingress控制器
k8s-ingress控制器
提示:

k8s-ingress控制器

Ingress 公开了从集群外部到集群内服务的 HTTP 和 HTTPS 路由。 流量路由由 Ingress 资源上定义的规则控制。 你可以在集群中部署任意数量的 ingress 控制器。 创建 ingress 时,应该使用适当的 ingress.class 注解每个 Ingress 以表明在集群中如果有多个 Ingress 控制器时,应该使用哪个 Ingress 控制器。 如果不定义 ingress.class ,云提供商可能使用默认的 Ingress 控制器。 Ingress 是对集群中服务的外部访问进行管理的 API 对象,典型的访问方式是 HTTP。 Ingress 可以提供负载均衡、SSL 终结和基于名称的虚拟托管 默认配置从 所有名称空间 监视Ingress对象。 若要更改此行为,请使用该标志 --watch-namespace 将范围限制为特定的名称空间。 裸机安装: 版本不同具体根据查看官网 https://kubernetes.github.io/ingress-nginx/deploy/ 配置通过主机80,443端口访问 github 安装文档 Kubernetes中的Ingress API使大量控制器能够提供简单而强大的方法来管理到Kubernetes工作负载的入站网络流量。在Kubernetes 1.18中,我们对该API进行了3个重要的添加: ingressclass概念: kubectl get svc -n ingress-nginx 外部访问 http://www.kubetest.com:32180/hostname.html 原理相当于把规则注入到nginx配置文件中 进入ingress-nginx可以看到相关nginx配置文件配置 kubectl exec -it ingress-nginx-controller-785557f9c9-skgkw -n ingress-nginx /bin/bash 基于名称的虚拟主机支持将针对多个主机名的 HTTP 流量路由到同一 IP 地址上。 ingress.http1.yaml ingress.http2.yaml ingressrule.yaml https://kubernetes.github.io/ingress-nginx/examples/auth/client-certs/ 创建自签证书 外部访问 https://www.ingress.com:30700/ 根据查看配置文件及测试发现 只要配置了tls,所有ingress的所有域名都有https Basic Authentication 本示例说明如何使用包含由生成的文件的机密在Ingress规则中添加身份验证 htpasswd 。生成的文件的名称很重要 auth (实际上-机密具有密钥 data.auth ),否则入口控制器将返回503。 验证 curl -v http://10.0.0.2:32180 -H 'Host: foo.bar.com' -u 'foo:123' 部署方式 可以使用以下注释控制重写:

k8s 对外服务之ingress
提示:

k8s 对外服务之ingress

负载均衡(LB)在微服务架构演进中具有非常重要的意义,可以说的内容有很多, 这里仅仅讨论四层和七层负载均衡的一些要点和区别 ,以便于对 ingress 的理解。所谓四层和七层负载均衡是按照网络层次OSI来划分的负载均衡类型(也可以按照其他的规则来分类,比如:应用的地理结构),简单来说: 四层负载均衡 表示负载均衡器用ip+port接收请求,再直接转发到后端对应的服务上,工作在传输层( transport layer ); 七层负载均衡 表示负载均衡器根据虚拟的url或主机名来接收请求,经过处理后再转向相应的后端服务上,工作在应用层( application layer )。 下图表示了4层和7层负载均衡在建立TCP连接上的区别,从图中可以看出,四层负载均衡需要建立的TCP连接其实之有一个,它只做一次转发,client直接和server连接;而7层负载均衡则需要建立两次TCP连接,client到LB,LB根据消息中的内容( 比如URL或者cookie中的信息 )来做出负载均衡的决定,接着建立LB到server的连接。 7层负载均衡有什么好处呢? 举个例子: 正向代理 :在使用VPS访问 的时候,通常会使用一个本地的代理服务器,浏览器的网络包会先经过本地的代理服务器,代理服务器会通过远在异国它乡的电脑来访问 并返回消息;这就好比去附近的咖啡店要先问一下手机咖啡店在哪里一样,手机就是一个正向代理服务器。 反向代理 :当访问的请求到达 时, 那边也设置了一个代理服务器,它通过查看请求的URL,发现是想查找视频内容,于时把消息转给了视频搜索服务器(过程是我乱说的),这就好比你去朋友家做客,开门的却是个管家,问你找谁?这时候管家就是一个反向代理了。 关于反向代理的好处这里就不多介绍,感兴趣可以看 这里 k8s 对外 暴露服务(service)主要有两种方式: NotePort , LoadBalance , 此外 externalIPs 也可以使各类service对外提供服务,但是当集群服务很多的时候,NodePort方式最大的缺点是会占用很多集群机器的端口;LB方式最大的缺点则是每个service一个LB又有点浪费和麻烦,并且需要k8s之外的支持; 而ingress则只需要一个NodePort或者一个LB就可以满足所有 service 对外服务的需求。工作机制大致可以用下图表示: 实际上, ingress 相当于一个7层的负载均衡器,是k8s对反向代理的一个抽象。大概的工作原理也确实类似于Nginx,可以理解成在 Ingress 里建立一个个映射规则 , ingress Controller 通过监听 Ingress 这个api对象里的配置规则并转化成 Nginx 的配置(kubernetes声明式API和控制循环) , 然后对外部提供服务。ingress包括: ingress controller 和 ingress resources ingress controller :核心是一个deployment,实现方式有很多,比如nginx, Contour, Haproxy, trafik, Istio,需要编写的yaml有:Deployment, Service, ConfigMap, ServiceAccount(Auth),其中service的类型可以是NodePort或者LoadBalancer。 ingress resources :这个就是一个类型为 Ingress 的k8s api对象了,这部分则是面向开发人员。 假设已经有两个服务部署在了k8s集群内部: 配置 Ingress resources,即可实现多个service对外暴露服务: 方式一: 接着在hosts文件中添加一条解析规则: ${ingress_IP} foo.bar.com ,这时通过 在浏览器 中访问: foo.bar.com/coffee 或者 foo.bar.com/tea 即可访问对应的后端service了。 方式二: 这时在hosts文件添加两条解析规则就可以在浏览器中访问了。此外,还可以配置TLS证书实现HTTPS访问,这里不再详述。