nginx 集群部署_入门级实操教程!从概念到部署,全方位了解K8S Ingress!
Kubernetes Ingress用于添加规则,以将流量从外部路由到Kubernetes集群的服务中。在本文中你将了解ingress 的概念,以及用于路由外部流量到Kubernetes deployment的ingress controller。
通常情况下,自定义Nginx或HAproxy Kubernetes部署将作为服务被暴露,它们用于将外部流量代理到内部集群的服务中。其中,路由规则将会bake到Pod中,并作为configmap添加。Kubernetes ingress的行为与此类似,只是路由规则将作为Kubernetes ingress对象维护。它具有动态路由规则配置的巨大优势,因此无需重新部署proxy pods。
Kubernetes Ingress入门浅析
想要顺利开始使用Kubernetes Ingress,你需要了解以下两个关键概念:
1、 Kubernetes Ingress
2、 Kubernetes Ingress Controller
让我们来逐一了解。
Kubernetes Ingress
Kubernetes Ingress是一个原生的Kubernetes资源,你可以设置规则来从外部路由流量到集群内部的服务端点。它需要一个Ingress Controller来路由ingress对象所指定的规则。Ingress 对象如下所示:
apiVersion: extensions/v1beta1kind: Ingressmetadata: name: test-ingress namespace: devspec: rules: - host: test.apps.example.com http: paths: - backend: serviceName: hello-service servicePort: 80
上面的声明意味着,对test.apps.example.com的所有调用都应该hit名为hello-service的服务,这一服务位于dev命名空间中。
关于Ingress对象,你需要了解的关键事项如下:
你应该在你所部署服务的命名空间内创建ingress规则。如果在其他没有ingress对象的命名空间中,你将无法路由流量到其中的服务内。
一个ingress对象需要一个ingress controller来路由流量
外部流量将不会hit ingress API,而是hit ingress controller服务。
Kubernetes Ingress Controller
Ingress controller是一个典型的部署在集群中的代理服务,它只是暴露给服务的Kubernetes部署。以下是可用于Kubernetes的Ingress Controller:
Nginx Ingress Controller
Traefik
HAproxy
Contour
GKE Ingress Controller
目前,Nginx是大多数企业的选择。以下是Nginx Ingress Controller的工作原理:
在Nginx controller pod内部的nginx.conf文件是一个go 模板,它可以与Kubernetes Ingress API通信并实时获得流量路由的最新值。
Nginx controller与Kubernetes ingress API 通信以检查是否为流量路由创建了规则。
如果它发现了任何ingress规则,它将应用到Nginx Controller配置,也就是使用go模板在pod内的nginx.conf文件。
如果你使用exec连接到pod并检查/etc/nginx/nginx.conf文件,则可以看到在conf文件中应用的ingress对象中指定的所有规则。
以下的架构图将解释在一个Kubernetes集群上的ingress设置。
接下来,我们详细看看如何使用Nginx Ingress Controller在Kubernetes中设置Ingress。
前期准备
一个Kubernetes集群
安装好的kubectl并已对Kubernetes集群进行身份验证
Kubernetes集群的管理员访问权限
指向ingress controller负载均衡器的有效域
如果你在谷歌云上,请为你的账户分配管理员权限以启用集群角色。
ACCOUNT=$(gcloud info --format='value(config.account)')kubectl create clusterrolebinding owner-cluster-admin-binding \ --clusterrole cluster-admin \ --user $ACCOUNT
请注意:本教程已在Google Cloud GKE集群上尝试过。理论上,它可在所有云环境中使用。如果你真的遇到任何错误,则可能需要在设置中进行一些调整。
设置Nginx Ingress Controller
有两个nginx ingress controller:
Kubernetes社区的Nginx ingress controller
https://github.com/kubernetes/ingress-nginx
Nginx公司的Nginx ingress controller
https://github.com/nginxinc/kubernetes-ingress
我们将使用Kubernetes社区的nginx controller。
Ingress controller需要特定的命名空间、服务账户、集群角色绑定、configmap等。因此,你需要使用官方ingress repo中的yaml文件来创建所提到的Kubernetes对象。
官方repo:
https://github.com/kubernetes/ingress-nginx/tree/master/deploy
让我们使用mandatory.yaml文件部署ingress controller,你可以在官方repo找到它。它有nginx所需的Kubernetes对象列表。
让我们使用kubectl创建Nginx controller deployment:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml
检查ingress controller pod以确保它是否正确设置:
kubectl get pods -n ingress-nginx
为Ingress Controller设置 LoadBalancer 服务
下一步是创建一个LoadBalancer类型的服务,以在集群外部暴露nginx controller部署。
Step1:在本地创建项目目录,然后切换到该目录。
mkdir ingress-deployment && cd ingress-deployment
Step2:创建一个名为nginx-ingress.yaml的文件
vi nginx-ingress.yaml
Step3:复制以下内容到文件
请注意:label下的annotation对于nginx controller部署集成非常重要
kind: ServiceapiVersion: v1metadata: name: ingress-nginx namespace: ingress-nginx labels: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginxspec: externalTrafficPolicy: Local type: LoadBalancer selector: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx ports: - name: http port: 80 targetPort: http - name: https port: 443 targetPort: https
Step4:创建ingress 服务
kubectl apply -f nginx-ingress.yaml
Step5:检查已创建的服务是否已连接到外部负载均衡器
kubectl get svc -n ingress-nginx
将域名映射到Loadbalancer IP
为了让我们的ingress的设置运转起来,我们需要映射一个域名到负载均衡器IP。你可以用两种方式,完成此操作。
单个DNS映射
你可以将单个域作为A record直接映射到负载均衡器IP,使用这一功能,你只能为ingress controller提供一个域,并可以基于多个路径进行流量路由。
例如:
www.example.com --> Loadbalancer IP
您可以使用此模型进行基于路径的路由。
以下有几个例子:
http://www.example.com/app1http://www.example.com/app2http://www.example.com/app1/apihttp://www.example.com/app2/api
通配符DNS映射
如果你映射一个通配符DNS到负载均衡器,你就可以通过ingress拥有动态DNS端点。
例如:
*.apps.example.com
这样,你可以通过单个ingress controller拥有多个动态子域,并且每个DNS有自己基于路径的路由。
例如:
#URL one http://demo1.apps.example.com/apihttp://demo1.apps.example.com/api/v1http://demo1.apps.example.com/api/v2 #URL two http://demo2.apps.example.com/apihttp://demo2.apps.example.com/api/v1http://demo2.apps.example.com/api/v2
出于演示目的,我们已将通配符DNS映射到LoadBalancer IP。你可以根据你的DNS提供商进行此设置。
设置一个Demo 应用程序
出于测试的目的,我们将部署一个demo应用程序并且添加一个ClusterIP服务到应用程序上。
Step1:创建一个名为dev的命名空间
kubectl create namespace dev
Step2:创建一个名为hello-app.yaml的文件
Step3:复制以下内容到文件并保存
apiVersion: apps/v1kind: Deploymentmetadata: name: hello-app namespace: devspec: selector: matchLabels: app: hello replicas: 3 template: metadata: labels: app: hello spec: containers: - name: hello image: "gcr.io/google-samples/hello-app:2.0"
Step4:使用kubectl创建deployment
kubectl create -f hello-app.yaml
检查deployment状态
Step5:创建一个名为hello-app-service.yaml的文件
Step6:复制以下内容到文件并保存
apiVersion: v1kind: Servicemetadata: name: hello-service namespace: dev labels: app: hellospec: type: ClusterIP selector: app: hello ports: - port: 80 targetPort: 8080 protocol: TCP
Step7:使用kubectl创建服务
kubectl create -f hello-app-service.yaml
检查服务状态
kubectl get svc -n dev
创建Kubernetes Ingress对象
现在让我们使用一个DNS创建一个Ingress对象来访问我们的hello app。Ingress对象可以设置路由规则。
Ingress controller pod会连接到Ingress API来检查规则,并且会相应地更新其nginx.conf。
Step1:创建一个名为ingress.yaml的文件
Step2:复制以下内容到文件并保存
使用你的域名替换test.apps.example.info。此处,我们假设你已经有*.apps.example.info格式的通配符域名。
apiVersion: extensions/v1beta1kind: Ingressmetadata: name: test-ingress namespace: devspec: rules: - host: test.apps.example.info http: paths: - backend: serviceName: hello-service servicePort: 80
Step3:描述已创建的ingress对象,它用于检查配置
kubectl describe ingress -n dev
现在,如果你尝试访问test.apps.example.info域(用你的域名代替它),你应该能够访问我们部署的app。
原文链接:
https://devopscube.com/kubernetes-ingress-tutorial/
https://devopscube.com/setup-ingress-kubernetes-nginx-controller/
推荐阅读
实践示例:从一个域名跳转到另一个域名,ingress-nginx经历了什么
kubectl+HPA!提升K8S容器资源利用的关键解决方案
Rancher 2.3实现K8S一键式升级!再也不用同步升级Rancher啦!
About Rancher Labs
Rancher Labs由CloudStack之父梁胜创建。旗舰产品Rancher是一个开源的企业级Kubernetes管理平台,实现了Kubernetes集群在混合云+本地数据中心的集中部署与管理。Rancher一向因操作体验的直观、极简备受用户青睐,被Forrester评为2018年全球容器管理平台领导厂商,被Gartner评为2017年全球最酷的云基础设施供应商。
目前Rancher在全球拥有超过一亿的下载量,并拥有包括中国人寿、华为、中国平安、兴业银行、民生银行、平安证券、海航科技、厦门航空、上汽集团、海尔、米其林、丰田、本田、中船重工、中联重科、迪斯尼、IBM、Cisco、Nvidia、辉瑞制药、西门子、CCTV、中国联通等全球著名企业在内的共27000家企业客户。
nginx 集群部署_入门级实操教程!从概念到部署,全方位了解K8S Ingress!相关推荐
- 入门级实操教程!从概念到部署,全方位了解K8S Ingress!
Kubernetes Ingress用于添加规则,以将流量从外部路由到Kubernetes集群的服务中.在本文中你将了解ingress 的概念,以及用于路由外部流量到Kubernetes deploy ...
- mysql集群(主从复制)实操
mysql集群(主从复制)实操 1.环境准备 1.准备5台全新的机器 192.168.31.23 master1 192.168.31.24 master2 192.168.31.89 s ...
- redis cluster 集群 HA 原理和实操(史上最全、面试必备)
文章很长,建议收藏起来慢慢读!疯狂创客圈总目录 语雀版 | 总目录 码云版| 总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 经典图书:<Java高并发核心编程(卷1)> 面试必备 ...
- TensorFlow Probability 概率编程入门级实操教程
雷锋网 AI 科技评论按:TensorFlow Probability(TFP)是一个基于 TensorFlow 的 Python 库,能够更容易地结合概率模型和深度学习.数据科学家.统计学以及机器学 ...
- k3s 卸载_手把手实操教程!使用k3s运行轻量级VM
前 言k3s作为轻量级的Kubernetes发行版,运行容器是基本功能.VM的管理原本是IaaS平台的基本能力,随着Kubernetes的不断发展,VM也可以纳入其管理体系.结合Container和V ...
- .net core部署Nginx集群
文章目录 一.Nginx是什么? 二.使用步骤 1.Linux上安装Nginx 2.查看nginx是否安装成功 3.启动nginx 4.检验 一.Nginx是什么? Nginx是一个高性能的HTTP和 ...
- Docker部署Nginx集群
背景 Nginx作为负载均衡工具在企业开发中,特别是分布式开发中十分常见,下面来看看腾讯云服务器中在CentOS7.6系统中使用Docker部署Nginx集群的具体步骤 环境 Linux:CentOS ...
- Java架构师:单体部署 ->Nginx 集群 -> + Keepalived“高可用”组件 -> + LVS负载均衡
一.集群阶段开篇概述 1.单体部署 1.1 单台服务器(节点)部署 1.2.多台服务器(节点)部署 集群.分布式.微服务中的各个服务器节点必须互通,必须在同一个局域网(内网要通) 1.3.单体架构的优 ...
- 基于LVS高可用架构实现Nginx集群分流
Nginx实用插件_踩踩踩从踩的博客-CSDN博客 前言 前面文章介绍Nginx的核心及扩展插件必要的性能优化,以及在nginx中如何实用用https:本篇文章会继续讲解重要的概念 lvs高可用框架, ...
最新文章
- SAP如何直接往系统中数据库表插入数据
- css设置元素的宽高为整数,为什么有的浏览器解析出来的宽高是小数?
- android 5.0新增 ui 控件,android3.0新增ui控件示例说明.doc
- mac mysql log在哪里_mac如何开启mysql bin-log
- java 中Double类型转换为百分比格式
- 微信小程序获取Token 存储2小时
- 电力载波通信模块JST-HPLC-S-C在物联网通信领域的应用
- beescms网站渗透测试和修复意见
- matlab模拟正态分布曲线拟合,[MATLAB数学相关] 急请教:正态分布曲线拟合问题
- antd tab右键菜单renderTabBar
- 国标 计算机房 湿度,数据中心机房:温度、湿度标准是什么?
- EndNote 毕业论文开题报告 批量导入 参考文献
- C# 名称空间的别名
- Ubuntu-离线安装基本依赖(gcc、make、dkms等)
- 国科大2019年大数据分析课件作业 考试-程学旗 靳小龙 刘盛华
- 常用的参数和非参数检验方法
- 【Python】Python提取word表格,并保存在excel中
- matlab画图高级,[转载]Matlab绘图系列之高级绘图
- 某财务部门结账时发现总金额不对头。很可能是从明细上漏掉了某1笔或几笔 递归算法
- 怎么制作真人qq秀_一分钟简单制作一个专属于自己的卡通头像