电脑和手机同步编辑wordpress,网络公司怎么优化网站,周口市做网站,东莞做网站要多少钱Ingress Ingressingress详解创建 Ingress 资源部署 Ingress 控制器#xff08;Nginx#xff09;下载ingress controller创建ingress-controller测试ingress创建两个应用和service配置ingress转发文件 修改ingress转发类型 Ingress 暴露服务基于域名的虚拟主机 Ingress 》ing… Ingress Ingressingress详解创建 Ingress 资源部署 Ingress 控制器Nginx下载ingress controller创建ingress-controller测试ingress创建两个应用和service配置ingress转发文件 修改ingress转发类型 Ingress 暴露服务基于域名的虚拟主机 Ingress 》ing要理解ingress需要区分两个概念ingress和ingress-controller ingress对象 指的是k8s中的一个api对象一般用yaml配置。作用是定义请求如何转发到service的规则可以理解为配置模板。 ingress-controller 具体实现反向代理及负载均衡的程序对ingress定义的规则进行解析根据配置的规则来实现请求转发。 简单来说ingress-controller才是负责具体转发的组件通过各种方式将它暴露在集群入口外部对集群的请求流量会先到ingress-controller而ingress对象是用来告诉ingress-controller该如何转发请求比如哪些域名哪些path要转发到哪些服务等等。 service 的表现形式为IP:PORT即工作在第四层传输层TCP/IP层对于不同的URL地址经常对应用不同的后端服务或者虚拟服务器这些应用层的转发机制仅通过kubernetes的service机制是无法实现的这种情况我么可以使用ingress策略定义和一个具体的ingress Controller. Ingress提供七层负载均衡能力可以通过 Ingress 配置提供外部可访问的 URL、负载均衡、SSL、基于名称的虚拟主机等。作为集群流量接入层Ingress 的高可靠性显得尤为重要。 ingress详解 这个负载均衡是基于nginx七层反向代理来实现的ingress工作原理如下图 外部客户端通过访问负载均衡器然后调度到service上然后在调度到IngressControllerIngressController通过Ingress规则域名或虚拟主机访问到后端pod而在Ingress规则当中对应的主机是由service分组来设定的可以看到这幅图有2种service最上面的service是用来对外提供服务的而下面2个service仅仅是用来分pod组的
Kubernetes 并没有自带 Ingress Controller实际上ingress-controller只是一个统称具体实现有多种需要自己单独安装目前由k8s维护的ingress-controller只有google云的GCE与ingress-nginx两个常用的是 Ingress-nginx Controller.Ingress 一般由三个组件组成1. Nginx 反向代理负载均衡器
2. Ingress Controller 可以理解为控制器它通过不断的跟 Kubernetes API 交互实时获取后端 Service、Pod 等的变化比如新增、删除等然后结合 Ingress 定义的规则生成配置然后动态更新上边的 Nginx 负载均衡器并刷新使配置生效来达到服务自动发现的作用。
3. Ingress 则是定义规则通过它定义某个域名的请求过来之后转发到集群中指定的 Service。它可以通过 Yaml 文件定义可以给一个或多个 Service 定义一个或多个 Ingress 规则。创建 Ingress 资源
Ingress 中的spec字段是Ingress资源的核心组成部分主要包含以下3个字段
rules用于定义当前Ingress资源的转发规则列表由rules定义规则或没有匹配到规则时所有的流量会转发到由backend定义的默认后端。
backend默认的后端用于服务那些没有匹配到任何规则的请求定义Ingress资源时必须要定义backend或rules两者之一该字段用于让负载均衡器指定一个全局默认的后端。
tlsTLS配置目前仅支持通过默认端口443提供服务如果要配置指定的列表成员指向不同的主机则需要通过SNI TLS扩展机制来支持该功能。
部署 Ingress 控制器Nginx
下载ingress controller
镜像要在node节点上拥有wget https://codeload.github.com/kubernetes/ingress-nginx/tar.gz/refs/tags/controller-v1.3.1tar xf ingress-nginx-controller-v1.3.1.tar.gzcd ingress-nginx-controller-v1.3.1/deploy/static/provider/cloudvim deploy.yaml #修改配置文件找到已下apiserver的版本
# 390行修改
kind: DaemonSet #将原来的Deployment修改为DaemonSet# 415行下边添加
hostNetwork: true #添加此配置将image中后面的hash值删掉创建ingress-controller
kubectl apply -f deploy.yaml 启动ingresskubectl get pods -n ingress-nginxkubectl get ingressclass测试ingress
创建两个应用和service
vim my-apache.yamlapiVersion: apps/v1
kind: Deployment
metadata:name: my-apache
spec:selector:matchLabels:run: my-apachereplicas: 2template:metadata:labels:run: my-apachespec:containers:- name: my-apacheimage: daocloud.io/library/httpd:2.4ports:- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: my-apachelabels:run: my-apache
spec:#type: NodePortports:- port: 80targetPort: 80#nodePort: 30002selector:run: my-apachecat my-nginx.yaml apiVersion: apps/v1
kind: Deployment
metadata:name: my-nginx
spec:selector:matchLabels:run: my-nginxreplicas: 2template:metadata:labels:run: my-nginxspec:containers:- name: my-nginximage: daocloud.io/library/nginx:1.7.9ports:- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: my-nginxlabels:run: my-nginx
spec:#type: NodePortports:- port: 80targetPort: 80#nodePort: 30001selector:run: my-nginx创建pod和service
kubectl apply -f my-apache.yaml kubectl apply -f my-nginx.yaml查看资源
kubectl get podskubectl get svc配置ingress转发文件
cat ingress-test.yaml apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: test-ingressnamespace: defaultannotations:nginx.ingress.kubernetes.io/rewrite-target: /
spec:ingressClassName: nginxrules: #定义转发规则- host: test.apache.ingress #指定域名方式http:paths:- path: / #指定访问的路径pathType: Prefix #定义路径的类型backend: #定义转发后端的服务service: #定义转发的servicename: my-apacheport:number: 80- host: test.nginx.ingresshttp:paths:- path: /pathType: Prefixbackend:service:name: my-nginxport:number: 80kubectl apply -f ingress-test.yaml //启动ingress转发文件kubectl get ingresswindows主机进行域名解析C:\Windows\System32\drivers\etc\hosts
ip 域名 //任何node节点ip就可修改ingress转发类型
kubectl edit svc ingress-nginx-controller -n ingress-nginx
# 将type修改为NodePortnginx-ingress-controller运行在node1,node2两个节点上。 如果网络中有dns服务器在dns中把这两个域名映射到nginx-ingress-controller运行的任意一个节点上如果没有dns服务器只能修改host文件了。 任意一个节点上操作(客户端解析) 在wind电脑设置本地解析 ip test.nginx.ingress
ip test.apache.ingress