域名映射(K8S集群系统应用服务发布之Ingress部署)

一、 K8s集群服务发布1、前言企业搭建一套Kubernetes 高可用集群系统为了节约资源和方便使用。K8s集群系统搭建好了我们如何使用呢?本章节图文并茂讲述在k8s系统上从创建服务pod到建立服务svc到发布应用的实现。让你轻松玩转k8s集群系统的应用发布。注:还没有k8s集群系统的可以参考我之前的《部署企业级k8s集群手册》快速使用二进制方式搭建一套系统。下面是《部署企业级k8s集群手册》文档地址请参考部署:https://wenku.baidu.com/view/c259ad09ecf9aef8941ea76e58fafab069dc442c.html企业集高可用k8s集群部署可以前往如下地址学习:https://wenku.baidu.com/view/c9de2452ab956bec0975f46527d3240c8447a169.html2、应用发布介绍应用发布是指将一个应用从创建到以网络域名方式给用户提供访问服务的过程。传统应用发布是在应用流量入口层建立流量负载均衡系统将域名指向负载均衡VIP,实现应用发布。在k8s系统中可以采用端口影射(NodePort)方式发布,但是k8s系统中的应用部署位置是变化的,如果pod变化了就找不到端口所以传统端口影射发布在k8s系统里难以实现。K8s系统的应用发布如何实现呢?需要有一套系统可以跟踪pod的变化实时根据pod变化关联端口对外提供统一访问方式就可以解决发布问题。目前k8s系统官方维护的一套发布插件是Ingress,本文就是从pod建立到服务svc 创建到使用ingress进行发布的操作介绍。3、K8s集群应用发布系统架构图k8s集群系统架构图二、 K8S集群里创建一个应用(pod)1、 k8s集群系统创建一个nginx应用 的deployment kubectl create deployment nginx-t –image=nginx –replicas=1deployment 创建,可以跟着一起操作测试 nginx应用服务正常不 如图操作检测nginx应用是否正常2、 K8s中由svc来实现内部pod访问的统一2.1 k8s中的svc介绍Service(简称svc)定义了Pod的逻辑集合和访问该集合的策略,是真实服务的抽象。Service提供了一个统一的服务访问入口以及服务代理和发现机制,用户不需要了解后台Pod是如何运行。Service通过Label就可以找到Pod组。service在整个集群中负责网络服务,因为pod实际上是不可靠的,可能会被停止或者重启,一旦重启就会导致IP地址发生变化。由于pod的IP地址可能随时发生变化(pod不健康或期间被重启或被重建等),在pod的外层使用任何流量负载如lvs nginx等进行负载均衡很难实现,而Service 就是解决这个问题而存在的:它可以根据pod的标签将对应的所有pod纳入一个负载均衡组的形式,通过kube-proxy 进行数据转发,提供一个外部到pod的唯一入口而不用关心pod的变动,进而实现和外部的调用通信。2.2 k8s 中service 类型Sevice 有四种网络类型 ClusterIP NodePort LoadBalancer external-ip ,目前最常用的是ClusterIP 和NodePort ,ClusterIP 是内部访问的虚拟IP,是k8s集群内部访问VIP,只能在集群内部访问。 NodePort是以在宿主机(k8s work-node)上开启一个端口的方式提供给外部访问,pod变化后 port也在变化。LoadBalancer类型的service 是可以实现集群外部访问服务的另外一种解决方案,一般用在公有云上结合公有云的LB协同使用对外提供访问,external-IP 结合内部DNS对外提供访问,目前不太常用这里就不做过多介绍,有需要大家去网上查阅资料。2.3 创建k8s中的SVC熟悉了SVC功能后我们要实现应用的发布就需要先创建应用的servicekubectl create service clusterip nginx-t –tcp=80:80svc创建及服务测试经过以上操作,我们创建了nginx的deployment 和Svc 接下来就是如何将服务发布到外网提供访问服务,这里选择k8s官方推荐的Ingress发布服务。三、 K8s发布系统Ingress部署1、 Ingress 是什么? Ingress 是公开了从集群外部到集群内服务的 HTTP 和 HTTPS 路由下面是一个将用户访问的所有流量都发送到同一 Service 的简单 Ingress 示例:ingress 服务发布示意图我们了解到K8s 提供的SVC对外提供访问服务有一定不足,Ingress就是为应用对外发布而生,通过联合svc 完美解决了对外应用发布的问题。实现了域名影射访问应用的发布2、 下载Ingress 并部署Ingress部署我们使用官方提供的yml文件部署。Ingress 官方网站https://github.com/kubernetes/ingress-nginx/blob/master/docs/deploy/index.md下载地址: https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.0/deploy/static/provider/cloud/deploy.yaml3、 部署ingress 官方默认的ingress yaml文件中的 部分镜像国内下载不了所以我们进行修改替换一下image: willdockerhub/ingress-nginx-controller:v1.0.0jettech/kube-webhook-certgen:v1.5.1替换方式 编辑deploy.yaml 找到上面两个镜像地址进行替换,详见下图操作image: willdockerhub/ingress-nginx-controller:v1.0.0jettech/kube-webhook-certgen:v1.5.13.1 给需要安装ingress的宿主机work-node 打标签 我们采用DaemonSet+nodeSelector 的方式部署ingress查看所有work-node标签kubectl get node –show-labels标签查看给k8s-node1 和k8s-node2 打标签igrsskubectl label node k8s-node1 ingress=igrsskubectl label node k8s-node2 ingress=igrsskubectl get node –show-labels查看node的labels3.2按要求修改部署文件完成ingress部署vim deploy.yaml (ingress的yaml文件)修改controller-deployment内容1 将 Deployment 修改为DaemonSet2定义段中找到 nodeSelector 增加 ingress: igrss3设置hostNetwork : true (宿主机上开启80 443端口)如下图修改deploy.yamlKubectl apply –f deploy.yaml 部署ingress 查看结果如下查看k8s-node1 端口 已经开启了80 和443这样我们就可以在本地主机hosts中配置域名 模拟外部访问Win7 hosts 在C:\Windows\System32\drivers\etc 这个目录下面修改hosts增加 192.168.3.112 t.nginx.com192.168.3.113 t.nginx.com3.3 部署ingress域名和svc关联提供外部访问 vim igx-t.yaml创建ingress 服务 域名和三svc对应执行部署kubectl apply -f igx-t.yaml在浏览器进行测试测试ingress服务发布完成至此多Ingress部署完成

本文出自快速备案,转载时请注明出处及相应链接。

本文永久链接: https://kuaisubeian.cc/34108.html

kuaisubeian