快捷搜索:  手机  明星

k8s集群部署初体验(K8S集群系统应用服务发布之Ingress部署)

k8s集群部署初体验(K8S集群系统应用服务发布之Ingress部署)kubectl create deployment nginx-t --image=nginx --replicas=1k8s集群系统架构图https://wenku.baidu.com/view/c9de2452ab956bec0975f46527d3240c8447a169.html应用发布是指将一个应用从创建到以网络域名方式给用户提供访问服务的过程。传统应用发布是在应用流量入口层建立流量负载均衡系统将域名指向负载均衡VIP,实现应用发布。在k8s系统中可以采用端口影射(NodePort)方式发布,但是k8s系统中的应用部署位置是变化的,如果Pod变化了就找不到端口所以传统端口影射发布在k8s系统里难以实现。K8s系统的应用发布如何实现呢?需要有一套系统可以跟踪pod的变化实时根据pod变化关联端口对外提供统一访问方式就可以解决发布问题。目前k8s系统官方维护的一套发布插件是Ingre

一、 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.html

2、应用发布介绍

应用发布是指将一个应用从创建到以网络域名方式给用户提供访问服务的过程。传统应用发布是在应用流量入口层建立流量负载均衡系统将域名指向负载均衡VIP,实现应用发布。在k8s系统中可以采用端口影射(NodePort)方式发布,但是k8s系统中的应用部署位置是变化的,如果Pod变化了就找不到端口所以传统端口影射发布在k8s系统里难以实现。

K8s系统的应用发布如何实现呢?需要有一套系统可以跟踪pod的变化实时根据pod变化关联端口对外提供统一访问方式就可以解决发布问题。目前k8s系统官方维护的一套发布插件是Ingress,本文就是从pod建立到服务svc 创建到使用ingress进行发布的操作介绍。

3、K8s集群应用发布系统架构图

k8s集群部署初体验(K8S集群系统应用服务发布之Ingress部署)(1)

k8s集群系统架构图

二、 K8S集群里创建一个应用(pod)1、 k8s集群系统创建一个nginx应用 的deployment

kubectl create deployment nginx-t --image=nginx --replicas=1

k8s集群部署初体验(K8S集群系统应用服务发布之Ingress部署)(2)

deployment 创建,可以跟着一起操作

测试 nginx应用服务正常不 如图操作

k8s集群部署初体验(K8S集群系统应用服务发布之Ingress部署)(3)

检测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功能后我们要实现应用的发布就需要先创建应用的service

kubectl create service clusterip nginx-t --tcp=80:80

k8s集群部署初体验(K8S集群系统应用服务发布之Ingress部署)(4)

svc创建及服务测试

经过以上操作,我们创建了nginx的deployment 和Svc 接下来就是如何将服务发布到外网提供访问服务,这里选择k8s官方推荐的Ingress发布服务。

三、 K8s发布系统Ingress部署1、 Ingress 是什么?

Ingress 是公开了从集群外部到集群内服务的 HTTP 和 HTTPS 路由

下面是一个将用户访问的所有流量都发送到同一 Service 的简单 Ingress 示例:

k8s集群部署初体验(K8S集群系统应用服务发布之Ingress部署)(5)

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.yaml

3、 部署ingress

官方默认的ingress yaml文件中的 部分镜像国内下载不了所以我们进行修改替换一下

image: willdockerhub/ingress-nginx-controller:v1.0.0

jettech/kube-webhook-certgen:v1.5.1

替换方式 编辑deploy.yaml 找到上面两个镜像地址进行替换,详见下图操作

k8s集群部署初体验(K8S集群系统应用服务发布之Ingress部署)(6)

image: willdockerhub/ingress-nginx-controller:v1.0.0

k8s集群部署初体验(K8S集群系统应用服务发布之Ingress部署)(7)

jettech/kube-webhook-certgen:v1.5.1

3.1 给需要安装ingress的宿主机work-node 打标签

我们采用DaemonSet nodeSelector 的方式部署ingress

查看所有work-node标签

kubectl get node --show-labels

k8s集群部署初体验(K8S集群系统应用服务发布之Ingress部署)(8)

标签查看

给k8s-node1 和k8s-node2 打标签igrss

kubectl label node k8s-node1 ingress=igrss

kubectl label node k8s-node2 ingress=igrss

kubectl get node --show-labels

k8s集群部署初体验(K8S集群系统应用服务发布之Ingress部署)(9)

查看node的labels

3.2按要求修改部署文件完成ingress部署

vim deploy.yaml (ingress的yaml文件)

修改controller-deployment内容

1 将 Deployment 修改为DaemonSet

2定义段中找到 nodeSelector 增加 ingress: igrss

3设置hostNetwork : true (宿主机上开启80 443端口)

如下图

k8s集群部署初体验(K8S集群系统应用服务发布之Ingress部署)(10)

修改deploy.yaml

Kubectl apply –f deploy.yaml 部署ingress 查看结果如下

k8s集群部署初体验(K8S集群系统应用服务发布之Ingress部署)(11)

查看k8s-node1 端口 已经开启了80 和443

这样我们就可以在本地主机hosts中配置域名 模拟外部访问

Win7 hosts 在C:\Windows\System32\drivers\etc 这个目录下面修改hosts

增加 192.168.3.112 t.nginx.com

192.168.3.113 t.nginx.com

3.3 部署ingress域名和svc关联提供外部访问

vim igx-t.yaml

k8s集群部署初体验(K8S集群系统应用服务发布之Ingress部署)(12)

创建ingress 服务 域名和三svc对应

执行部署

kubectl apply -f igx-t.yaml

在浏览器进行测试

k8s集群部署初体验(K8S集群系统应用服务发布之Ingress部署)(13)

测试ingress服务发布完成

至此多Ingress部署完成

猜您喜欢: