11.Ingress资源?

对于负载均衡和外网代理的解决方案,云上环境,我们使用SLB;传统环境,我们会选Haproxy、LVS,但在kubernetes体系中,我只会选择ingress(controllers)!

1.什么是Ingress?

ingress是一个管理kubernetes集群南北流量的api 对象,典型的有HTTP。
并且可以提供:LB负载均衡的能力。

注意:
1)南北流量和东西流量是服务网格中的经常描述网络流量的术语。
南北流量(NORTH-SOUTH traffic):集群外部->集群内部
东西流量(EAST-WEST traffic):集群内部相互访问2)ingress仅是一段配置,你可以理解为SLB的配置信息片段。
实例化SLB能力的话,你还需要一个ingress controller。

2.什么是IngressController?

Ingress Controller是一种能读懂ingress配置,并将其翻译成自己配置文件的应用程序。
比较常见的有ingress-nginx、kong、traefik、istio、envoy等

Ingress Controller:
将ingress配置信息转换为自身配置的应用程序
Ingress:
只定义流量转发和调度的通用格式的配置信息

如果你刚接触kubernetes,并且只是为了学习,建议直接使用ingress-nginx。

3.Ingress代理逻辑

这张图我画的是基于ingress-nginx的技术栈,并通过nodeport类型的service,将ingress服务暴露到集群外,供客户端的访问。
你需要记住的是:

1.ingress controllers是实际的应用程序
2.ingress只是转发的配置信息,通过ingress controllers实例化,并且通过lua语言,在ingress-nginx的pod中,实例化成一个基础的nginx配置文件而已,和传统的nginx并无太大的差异。

4.Ingress-Nginx部署和测试

1.首先,下载ingress-nginx的配置清单,修改images地址为阿里云(否则会被墙):registry.aliyuncs.com/google_containers/nginx-ingress-controller:0.26.1

wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml

2.使用apply -f mandatory.yaml启动配置清单,并查看Pod是否运行成功

[root@centos-1 dingqishi]# kubectl get pods -n ingress-nginx
NAME                                       READY   STATUS    RESTARTS   AGE
nginx-ingress-controller-dc55d4998-zxnrd   1/1     Running   0          20m

3.接着,编辑nginx-ingress-service.yaml配置文件

apiVersion: v1
kind: Service
metadata:name: nginx-ingress-controllernamespace: ingress-nginx
spec:type: NodePortports:- port: 80     #Service端口name: httpnodePort: 30080    #本机端口- port: 443name: httpsnodePort: 30443selector:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginx

4.然后,apply -f配置文件,并观察。
你可以对比我上面的图,此时基于nodeport类型的nginx-ingress-controller的service已经部署成功。

[root@centos-1 dingqishi]# kubectl get svc -n ingress-nginx
NAME                       TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
nginx-ingress-controller   NodePort   10.108.188.111   <none>        80:30080/TCP,443:30443/TCP   12m

此时,你可以通过访问任意一台虚拟机的30080端口,便能够访问到Nginx404页面

5.接下来,我们编辑myapp-svc.yaml和myapp-ingress.yaml,并通过apply -f创建。
我们期望将Deployment暴露到集群外,供客户端进行访问。

提示:
当你使用多个ingress-controllers的时候,可以通过kubernetes.io/ingress.class: "nginx"来申明使用哪一个controller

#myapp-svc.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: myappnamespace: myns
spec:replicas: 2selector:matchLabels:app: myapprel: betatemplate:metadata:namespace: mynslabels:app: myapprel: betaspec:containers:- name: myappimage: registry.cn-hangzhou.aliyuncs.com/aaron89/myapp:v1---
apiVersion: v1
kind: Service
metadata:name: myappnamespace: myns
spec:selector:app: myapprel: betaports:- name: httpport: 80targetPort: 80#myapp-ingress.yaml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:name: myappnamespace: mynsannotations:nginx.ingress.kubernetes.io/rewrite-target: /kubernetes.io/ingress.class: "nginx"            #当有多种ingress-controller的时候,用这个参数区分使用哪个controller
spec:rules:- host: foo.bar.comhttp:paths:- path: /backend:serviceName: myappservicePort: 80

6.此时,修改本机hosts并访问foo.bar.com:30080`,可以成功

192.168.0.104 foo.bar.com

5.tomcat部署实战

1.首先,编辑tomcat-svc-ingress.yaml,并apply -f生成。配置文件中的信息,应该可以一目了然。

apiVersion: v1
kind: Namespace
metadata:name: eshop---
apiVersion: apps/v1
kind: Deployment
metadata:name: tomcatnamespace: eshop
spec:replicas: 2selector:matchLabels:app: tomcatrel: betatemplate:metadata:namespace: eshoplabels:app: tomcatrel: betaspec:containers:- name: tomcatimage: tomcat:alpine---
apiVersion: v1
kind: Service
metadata:name: tomcatnamespace: eshop
spec:selector:app: tomcatrel: betaports:- name: httpport: 8080targetPort: 8080     #tomcat(Pod)端口- name: ajpport: 8009targetPort: 8009     #tomcat(Pod)端口---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:name: tomcatnamespace: eshopannotations:nginx.ingress.kubernetes.io/rewrite-target: /kubernetes.io/ingress.class: "nginx"            #当有多种ingress-controller的时候,用这个参数区分使用哪个controller
spec:rules:- host: eshop.foo.comhttp:paths:- path: /backend:serviceName: tomcatservicePort: 8080

2.观察集群资源生成情况

[root@centos-1 dingqishi]# kubectl get all -n eshop
NAME                          READY   STATUS    RESTARTS   AGE
pod/tomcat-6b6fb9c8f6-jq9w2   1/1     Running   0          4m33s
pod/tomcat-6b6fb9c8f6-qz8z6   1/1     Running   0          4m33sNAME             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE
service/tomcat   ClusterIP   10.110.148.61   <none>        8080/TCP,8009/TCP   4m33sNAME                     READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/tomcat   2/2     2            2           4m33sNAME                                DESIRED   CURRENT   READY   AGE
replicaset.apps/tomcat-6b6fb9c8f6   2         2         2       4m33s

3.观察ingress条目生成情况

[root@centos-1 dingqishi]# kubectl get ingress -n eshop
NAME     HOSTS           ADDRESS   PORTS   AGE
tomcat   eshop.foo.com             80      5m23s[root@centos-1 dingqishi]#kubectl describe ingress tomcat -n eshop
Name:             tomcat
Namespace:        eshop
Address:
Default backend:  default-http-backend:80 (<none>)
Rules:Host           Path  Backends----           ----  --------eshop.foo.com  /   tomcat:8080 (10.244.1.51:8080,10.244.2.34:8080)

4.进入ingress-nginx,查看配置文件生成情况。你会发现lua脚本已经将相关配置信息,读取了进来。

kubectl exec -it pod/nginx-ingress-controller-dc55d4998 -zxnrd -n ingress-nginx -- /bin/shmore /etc/nginx/nginx.conf## start server eshop.foo.comserver {server_name eshop.foo.com ;listen 80;set $proxy_upstream_name "-";location / {set $namespace      "eshop";set $ingress_name   "tomcat";set $service_name   "tomcat";set $service_port   "8080";set $location_path  "/";rewrite_by_lua_block {balancer.rewrite()}

5.新增Mac本机Hosts文件,并测试,至此部署已经完成

192.168.0.11 eshop.foo.comdingqishideMacBook-Pro:~ dingqishi$ curl -I eshop.foo.com:30080
HTTP/1.1 200
Server: nginx/1.15.5
Date: Tue, 03 Dec 2019 10:47:23 GMT
Content-Type: text/html;charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding

最新的安装地址请看:https://kubernetes.github.io/ingress-nginx/deploy/

11.Ingress资源相关推荐

  1. 无缝融入 Kubernetes 生态 | 云原生网关支持 Ingress 资源

    Kubernetes Ingress 介绍 通常情况下,Kubernetes 集群内的网络环境与外部是隔离的,也就是说 Kubernetes 集群外部的客户端无法直接访问到集群内部的服务,这属于不同网 ...

  2. Ingress 资源与 networking.k8s.io/v1 问题

    1 no matches for kind "Ingress" in version "networking.k8s.io/v1" 在 kubernetes v ...

  3. Kubernetes集群服务发现之Ingress资源详解(三十)

    Ingress-nginx资源介绍及详细配置 文章目录 Ingress-nginx资源介绍及详细配置 1.Ingress原理总结 2.部署Ingress环境 2.1.部署Ingress 2.2.准备两 ...

  4. ubuntu 解决“无法获得锁 /var/lib/dpkg/lock -open (11:资源暂时不可用)”的方法...

    在ubuntu系统的termial下,用apt-get install 安装软件的时候,如果在未完成下载的情况下将terminal close.此时 apt-get进程可能没有结束.结果,如果再次运行 ...

  5. python小型编程_学习Python编程的11个资源

    用 Python 写代码并不难,事实上,它一直以来都是被声称为最容易学习的编程语言.如果你正打算学习 web 开发,Python 是一个不错的选择,甚至你想学游戏开发也可 以从 Python 开始,因 ...

  6. 11个资源强大的网站!知乎超20万人强烈推荐,再也不怕资源难找

    在我们日常工作学习中难免就需要在网站搜索资料,这时候一定需要一个能够帮你搜索一切你想要的资源,从而为你剩下一大半时间,那么今天为大家整理了11个超级好用的黑科技资源搜索网站,帮你解决因为上网找不到合适 ...

  7. 11个资源强大的网站!

    在我们日常工作学习中难免就需要在网站搜索资料,这时候一定需要一个能够帮你搜索一切你想要的资源,从而为你剩下一大半时间,那么今天为大家整理了11个超级好用的黑科技资源搜索网站,帮你解决因为上网找不到合适 ...

  8. L-Edit 11.1-附资源包

    软件介绍: L-edit 是一款由tanner推出的 集成路设计软件 (版图设计).该软件拥有易用.易学的特点,主要适用于集成电路的设计.微纳器件操作. 软件下载: TannerL-Edit11.1- ...

  9. 11. K8S资源限制,多账户管理及网络实现

    1. Kubernetes pod.container与namespace资源限制 CPU 以核心(毫核,1核=1000毫核,500m=0.5核)为单位. memory 以字节为单位. request ...

最新文章

  1. 段式存储、页式存储。
  2. Java-Web JSP指令、javabean和EL表达式
  3. mysql uroot e_批量 kill mysql 连接
  4. #CSP 201909-1 小明种苹果
  5. daocloud创建mysql_DaoCloud体验-使用node构建应用程序
  6. 如何在Eclipse中如何自动添加注释和自定义注释风格
  7. 牛客网Java刷题知识点之ArrayList 、LinkedList 、Vector 的底层实现和区别
  8. 部门开始做技术talk
  9. 类似c语言sizeof,sizeof()与strlen()在C语言中有什么不同
  10. 计算机在网络通信方面的应用,分析计算机技术在通信中的应用
  11. docker安装speedtest和宝塔面板
  12. 模拟实现求字符串长度函数strlen
  13. catia 二次开发:环境变量路径,检查路径存在,关闭文件,对象为空,获取pad对象,err,part的product,全局变量,常量,SystemService,input,选择文件 时间,函数调用
  14. Python拉宾米勒(判断素数)
  15. 多媒体一体机计算机打不开,多媒体教学一体机突然打不开PPT是怎么回事?
  16. 教你如何设置电脑保护色来保护眼睛
  17. 大学生生涯规划1000字计算机专业,计算机大学生职业生涯规划书1000字
  18. PC微信逆向HOOK消息之快速更新找到HOOK地址
  19. tomcat 运行提示The background cache eviction process was unable to free
  20. mpp文件能转换成PDF

热门文章

  1. SQLSERVER储存过程批量添加10万条数据
  2. 《你好,李焕英》爆红,Python爬虫+数据分析告你票房为什么这么高?
  3. 杂文 -- IT部门构成
  4. 多平台跨平台操作轻量剪贴板粘贴板软件
  5. tools.jar的位置
  6. 没有“光线追踪”,赛博朋克2077就算残废?
  7. 浪潮服务器改uefi引导,浪潮服务器重做raid 设置pxe 启动
  8. 什么是长连接,什么是短连接?长连接和短连接的区别是什么?
  9. 1144: 零起点学算法51——数组中删数(C语言)
  10. 2021彻底大变天的教育行业,这一整年都发生了什么?