一、Ingress简介
Ingress是对外服务到集群内的Service之间规则的集合:允许进入集群的请求被转发至集群内的Service。Ingress能把Service配置成外网能够访问的url,流量负载均衡,终止ssl,提供基于域名访问的虚拟主机等,用户通过访问url访问Service。Ingress-controller负责处理所有Ingress的请求流量,它通常是一个负载均衡器。在Kubernetes中,服务和Pod的IP地址仅可以在集群网络内部使用,对于集群外的应用是不可见的。为了使外部的应用能够访问集群内的服务,在Kubernetes 目前 提供了以下几种方案:NodePortLoadBalancerIngress
Ingress组成
ingress controller将新加入的Ingress转化成Nginx的配置文件并使之生效ingress服务将Nginx的配置抽象成一个Ingress对象,每添加一个新的服务只需写一个新的Ingress的yaml文件即可
Ingress工作原理
1.ingress controller通过和kubernetes api交互,动态的去感知集群中ingress规则变化,2.然后读取它,按照自定义的规则,规则就是写明了哪个域名对应哪个service,生成一段nginx配置,3.再写到nginx-ingress-control的pod里,这个Ingress controller的pod里运行着一个Nginx服务,控制器会把生成的nginx配置写入/etc/nginx.conf文件中,4.然后reload一下使配置生效。以此达到域名分配置和动态更新的问题。Ⅰ、ingress策略本质是转发的规则;Ⅱ、ingress-controller基于ingress策略将客户端的请求转发到service对应的后端endpoint,即Pod上;实现了为所有后端service提供统一入口,基于不同的http url向后转发负载分发规则,并可以灵活设置7层的负载分发策略的功能;一般由nginx实现。
Ingress可以解决什么问题
1.动态配置服务如果按照传统方式, 当新增加一个服务时, 我们可能需要在流量入口加一个反向代理指向我们新的k8s服务. 而如果用了Ingress, 只需要配置好这个服务, 当服务启动时, 会自动注册到Ingress的中, 不需要而外的操作.2.减少不必要的端口暴露配置过k8s的都清楚, 第一步是要关闭防火墙的, 主要原因是k8s的很多服务会以NodePort方式映射出去, 这样就相当于给宿主机打了很多孔, 既不安全也不优雅. 而Ingress可以避免这个问题, 除了Ingress自身服务可能需要映射出去, 其他服务都不要用NodePort方式
二、部署配置Ingress controller
1、准备docker images
由于下载的yaml文件中需要用到的两个镜像 ingress-nginx和defaultbackend,但是国内是无法直接下载,因此需要提前准备好,方式和部署kubernetes集群的docker镜像是一样的,以下是操作方式以及实际操作流程# 【如果镜像pull之后,不想改tag,则在对应的yaml文件中进行调整】# 由于下载的yaml部署文件中,使用的镜像版本是0.30.0,因此找这个版本的docker pull suisrc/ingress-nginx:0.30.0docker tag suisrc/ingress-nginx:0.30.0 quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.30.0docker rmi suisrc/ingress-nginx:0.30.0# 由于在部署的时候,如果删除了阿里云的那个镜像,部署会出现无法拉取镜像出现,因此这里就不删除docker pull registry.cn-qingdao.aliyuncs.com/kubernetes_xingej/defaultbackend-amd64:1.5docker tag registry.cn-qingdao.aliyuncs.com/kubernetes_xingej/defaultbackend-amd64:1.5 k8s.gcr.io/defaultbackend:1.5
# 实际操作如下root@k8s-master:~/k8s/ingress# docker pull suisrc/ingress-nginx:0.30.00.30.0: Pulling from suisrc/ingress-nginxc9b1b535fdd9: Pull complete45ba4c948320: Pull complete70c24c20a569: Pull complete58acda238271: Pull complete7873cb07ba91: Pull complete3572b831a7ad: Pull complete2e4b94d88c7a: Pull complete73d054fe6162: Pull complete72107c0475b3: Pull complete0920fa00bdaf: Pull completebbc4231b0eed: Pull complete1a0d8e7b84e8: Pull completeb2947a77ebb4: Pull completeDigest: sha256:d22b600d98649dd06a128fbf0c8bf8d1aaf25512f0d57770079b7211e1d4e64aStatus: Downloaded newer image for suisrc/ingress-nginx:0.30.0docker.io/suisrc/ingress-nginx:0.30.0root@k8s-master:~/k8s/ingress# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx latest ed21b7a8aee9 9 days ago 127MBk8s.gcr.io/kube-proxy v1.18.0 43940c34f24f 2 weeks ago 117MBk8s.gcr.io/kube-controller-manager v1.18.0 d3e55153f52f 2 weeks ago 162MBk8s.gcr.io/kube-scheduler v1.18.0 a31f78c7c8ce 2 weeks ago 95.3MBk8s.gcr.io/kube-apiserver v1.18.0 74060cea7f70 2 weeks ago 173MBsuisrc/ingress-nginx 0.30.0 0118b9637e9b 2 weeks ago 393MBquay.io/coreos/flannel v0.12.0-amd64 4e9f801d2217 3 weeks ago 52.8MBquay.io/coreos/flannel v0.12.0-arm64 4e9f801d2217 3 weeks ago 52.8MBk8s.gcr.io/pause 3.2 80d28bedfe5d 7 weeks ago 683kBk8s.gcr.io/coredns 1.6.7 67da37a9a360 2 months ago 43.8MBk8s.gcr.io/etcd 3.4.3-0 303ce5db0e90 5 months ago 288MBroot@k8s-master:~/k8s/ingress# docker tag suisrc/ingress-nginx:0.30.0 quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.30.0root@k8s-master:~/k8s/ingress# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx latest ed21b7a8aee9 9 days ago 127MBk8s.gcr.io/kube-proxy v1.18.0 43940c34f24f 2 weeks ago 117MBk8s.gcr.io/kube-scheduler v1.18.0 a31f78c7c8ce 2 weeks ago 95.3MBk8s.gcr.io/kube-controller-manager v1.18.0 d3e55153f52f 2 weeks ago 162MBk8s.gcr.io/kube-apiserver v1.18.0 74060cea7f70 2 weeks ago 173MBsuisrc/ingress-nginx 0.30.0 0118b9637e9b 2 weeks ago 393MBquay.io/kubernetes-ingress-controller/nginx-ingress-controller 0.30.0 0118b9637e9b 2 weeks ago 393MBquay.io/coreos/flannel v0.12.0-amd64 4e9f801d2217 4 weeks ago 52.8MBquay.io/coreos/flannel v0.12.0-arm64 4e9f801d2217 4 weeks ago 52.8MBk8s.gcr.io/pause 3.2 80d28bedfe5d 7 weeks ago 683kBk8s.gcr.io/coredns 1.6.7 67da37a9a360 2 months ago 43.8MBk8s.gcr.io/etcd 3.4.3-0 303ce5db0e90 5 months ago 288MBroot@k8s-master:~/k8s/ingress# docker rmi suisrc/ingress-nginx:0.30.0root@k8s-master:~/k8s/ingress# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx latest ed21b7a8aee9 9 days ago 127MBk8s.gcr.io/kube-proxy v1.18.0 43940c34f24f 2 weeks ago 117MBk8s.gcr.io/kube-scheduler v1.18.0 a31f78c7c8ce 2 weeks ago 95.3MBk8s.gcr.io/kube-controller-manager v1.18.0 d3e55153f52f 2 weeks ago 162MBk8s.gcr.io/kube-apiserver v1.18.0 74060cea7f70 2 weeks ago 173MBquay.io/kubernetes-ingress-controller/nginx-ingress-controller 0.30.0 0118b9637e9b 2 weeks ago 393MBquay.io/coreos/flannel v0.12.0-amd64 4e9f801d2217 4 weeks ago 52.8MBquay.io/coreos/flannel v0.12.0-arm64 4e9f801d2217 4 weeks ago 52.8MBk8s.gcr.io/pause 3.2 80d28bedfe5d 7 weeks ago 683kBk8s.gcr.io/coredns 1.6.7 67da37a9a360 2 months ago 43.8MBk8s.gcr.io/etcd 3.4.3-0 303ce5db0e90 5 months ago 288MBroot@k8s-master:~/k8s/ingress# docker pull registry.cn-qingdao.aliyuncs.com/kubernetes_xingej/defaultbackend-amd64:1.51.5: Pulling from kubernetes_xingej/defaultbackend-amd64Digest: sha256:2cdff48ab9b20ca5f9b0ee48bf3c139c51d6fb1a15245966583bc371c121c238