注意:可在我 百度网盘 直接下载 helm、minio 以及修改好的 gitlab 资源包linux
本系列文章:nginx
第一章:helm 一分钟轻松完爆git
第二章:helm 轻松完爆公共仓库web
第三章:helm 轻松完爆私有仓库windows
第四章:helm 轻松完爆 chart后端
第五章:helm 轻松完爆 releaseapi
第六章:helm 轻松完爆 gitlab浏览器
第七章:helm 轻松完爆 nginx-ingresstomcat
目录app
1 版本说明
2 介绍 nginx-ingress
3 下载 nginx-ingress
4 配置 nginx-ingress
5 安装 nginx-ingress
5.1 修改 deployment version
5.2 添加 deployment selector
6 nginx-ingress 组成
7 建立 tomcat 微服务
8 建立 ingress
9 访问 tomcat
9.1 配置 hosts
9.2 肯定 nginx-ingress 的服务端口
1 版本说明
k8s:v1.16.3;helm:v3.0.0;nginx-ingress:0.9.5。
2 介绍 nginx-ingress
nginx-ingress 是 k8s 入口,负责将客户端请求路由到 k8s 内部微服务上。若是说 k8s 是一个监狱,那么 nginx-ingress 就是监狱大门。
3 下载 nginx-ingress
选择阿里云的 helm chart 仓库。
下载 nginx-ingress:
helm pull stable/nginx-ingress
4 配置 nginx-ingress
修改 values.yaml 文件:
1) hostNetwork: false 改成 true
2)type: LoadBalancer 改成 NodePort
3)rbac:
create: false 改成 true
5 安装 nginx-ingress
## 第一个 nginx-ingress 是 release 名。第二个 nginx-ingress 是 chart 解压目录。
helm install nginx-ingress nginx-ingress
5.1 修改 deployment version
Error: unable to build kubernetes objects from release manifest: unable to recognize "": no matches for kind "Deployment" in version "extensions/v1beta1"
若是有如上报错,须要修改 nginx-ingress deployment 文件的 apiVersion。
grep -irl "extensions/v1beta1" nginx-ingress | grep deploy | xargs sed -i 's#extensions/v1beta1#apps/v1#g'
5.2 添加 deployment selector
Error: unable to build kubernetes objects from release manifest: error validating "": error validating data: ValidationError(Deployment.spec): missing required field "selector" in io.k8s.api.apps.v1.DeploymentSpec
若是有如上报错,须要在 deployment 文件添加 selector:
vi nginx-ingress/templates/controller-deployment.yaml
vi nginx-ingress/templates/default-backend-deployment.yaml
修改后再次执行,安装成功:
6 nginx-ingress 组成
kubectl get pods -n nginx-ingress
由上图可知,nginx-ingress 包括 2 个组件:
1)nginx-ingress-controller:nginx-ingress 控制器,负责 nginx-ingress pod 的生命周期管理。nginx-ingress pod 本质就是 nginx。用来处理请求路由等功能。这也是为何称 nginx-ingress pod 是集群流量入口的缘故。
2)nginx-ingress-default-backend:默认后端。若是你没有配置路由或路由配错了,将会由此 pod 兜底,通常会显示 404 给你。
7 建立 tomcat 微服务
nginx-ingress已经建立完毕,至关于nginx已经就绪。下面咱们在k8s集群中建立一个名为 myweb-svc 的 tomcat 服务。
## 启动并暴露 tomcat 服务
kubectl run myweb --image=tomcat
kubectl expose deployment myweb --port=8080 --name=myweb-svc
8 建立 ingress
刚建立完 nginx-ingress,如今又建立 ingress。是否是会有点迷,到底二者的区别是什么?你能够这么来理解,nginx-ingress 是 nginx,而 ingress 则至关于 nginx 里面的一段配置信息。例以下面的 ingress 文件,就是建立从 nginx 路由到 tomcat 的配置。
ingress 文件以下:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: server-jiuxi-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: zcy.jiuxi.org
http:
paths: /
- path:
backend:
serviceName: myweb-svc
servicePort: 8080
翻译成 nginx 的配置就是:
server {
server_name zcy.jiuxi.org
location / {
proxy_pass http://myweb-svc:8080
}
}
执行下列语句建立 ingress,生成 nginx 到 tomcat 的路由规则:
kubectl apply -f server-jiuxi-ingress.yaml
9 访问 tomcat
上面建立了 nginx-ingress(nginx)、又建立了 tomcat 微服务、又生成了从 nginx 路由到 tomcat 的规则(ingress)。那么下一步咱们就能够经过设置好的 ingress 来访问 tomcat 微服务了。可是访问前,还须要再作2点配置。
9.1 配置 hosts
由于 ingress 中设置了域名 zcy.jiuxi.org,因此须要在浏览器所在的机器上设置 dns。个人IP是10.110.101.98。我的根据实际状况修改。
## windows 用户。编辑 C:\Windows\System32\drivers\etc\hosts 文件
## linux 用户。编辑 /etc/hosts 文件
9.2 肯定 nginx-ingress 的服务端口
kubectl get svc
我这里是30742。注意不是80,也不是8080。
浏览器中输入 http://zcy.jiuxi.com:30742。
自此,helm 轻松完爆了 nginx-ingress。