K8S学习之基础七十:部署ingress七层代理

部署ingress七层代理

	Ingress可以把进入到集群内部的请求转发到集群中的一些服务上,从而可以把服务映射到集群外部。Ingress 能把集群内Service 配置成外网能够访问的 URL,流量负载均衡,提供基于域名访问的虚拟主机等。
	Ingress简单的理解就是你原来需要改Nginx配置,然后配置各种域名对应哪个 Service,现在把这个动作抽象出来,变成一个 Ingress 对象,你可以用 yaml 创建,每次不要去改Nginx 了,直接改yaml然后创建/更新就行了;那么问题来了:”Nginx 该怎么处理?”
	Ingress总结:ingress是k8s中的资源,主要是管理ingress-controller这个代理的配置文件
	Ingress Controller 这东西就是解决 “Nginx 的处理方式” 的;Ingress Controller 通过与 Kubernetes API 交互,动态的去感知集群中Ingress规则变化,然后读取他,按照他自己模板生成一段 Nginx 配置,再写到 Nginx Pod 里,最后 reload 一下 

	Ingress Controller介绍
	Ingress Controller是一个七层负载均衡调度器,客户端的请求先到达这个七层负载均衡调度器,由七层负载均衡器在反向代理到后端pod,常见的七层负载均衡器有nginx、traefik,以我们熟悉的nginx为例,假如请求到达nginx,会通过upstream反向代理到后端pod应用,但是后端pod的ip地址是一直在变化的,因此在后端pod前需要加一个service,这个service只是起到分组的作用,那么我们upstream只需要填写service地址即可。

	Ingress-controller里面封装就是nginx,有的同学问?

	Nginx:nginx配置文件一改动,你还需要手动reload一下才可以生效,但是如果用ingress-controller封装的nginx,你ingress维护配置,ingress创建好之后,会自动的把配置文件传到ingress-controller这个pod里,会自动进行reload,然后配置就生效了。

K8S学习之基础七十:部署ingress七层代理_第1张图片
Ingress和Ingress Controller总结
Ingress Controller
Ingress Controller结合Ingress 定义的规则生成配置,然后动态更新ingress-controller里的Nginx 或者trafik负载均衡器,并刷新使配置生效,来达到服务自动发现的作用。
Ingress 则是定义规则,通过它定义某个域名的请求过来之后转发到集群中指定的 Service。它可以通过 Yaml 文件定义,可以给一个或多个 Service 定义一个或多个 Ingress 规则。

	使用Ingress Controller代理k8s内部pod的流程
	(1)部署Ingress controller,我们ingress controller使用的是nginx
	(2)创建Pod应用,可以通过控制器创建pod
	(3)创建Service,用来分组pod
	(4)创建Ingress http,测试通过http访问应用
	(5)创建Ingress https,测试通过https访问应用
	客户端通过七层调度器访问后端pod的方式

	Ingress-controller高可用

	Ingress Controller是集群流量的接入层,对它做高可用非常重要,可以基于keepalive实现nginx-ingress-controller高可用,具体实现如下:
	Ingress-controller根据Deployment+ nodeSeletor+pod反亲和性方式部署在k8s指定的两个work节点,nginx-ingress-controller这个pod共享宿主机ip,然后通过keepalive+nginx实现nginx-ingress-controller高可用

参考: https://github.com/kubernetes/ingress-nginx
https://github.com/kubernetes/ingress-nginx/tree/main/deploy/static/provider/baremetal

	部署ingress
	在node节点导入镜像
# node节点执行导入镜像
ctr -n k8s.io images import kube-webhook-certgen-v1.1.0.tar.gz 
ctr -n k8s.io images import ingress-nginx-controllerv1.1.0.tar.gz
# mast节点执行
kubectl apply -f ingress-deploy.yaml

K8S学习之基础七十:部署ingress七层代理_第2张图片
在这里插入图片描述

vi ingress-myapp.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-myapp
  namespace: default
spec:
  ingressClassName: nginx
  rules:
  - host: tomcat.ak.com
    http:
      paths:
      - backend:
          service:
            name: tomcat
            port:
              number: 8080
        path: /
        pathType: Prefix
kubectl apply -f ingress-myapp.yaml

在这里插入图片描述
如果以上命令有报错如下:
在这里插入图片描述
解决办法:
kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission
重新执行即可

你可能感兴趣的:(K8S学习,kubernetes,学习,容器,云原生,rancher)