文章目录

  • 一 ingress
    • 1.1ingress 介绍
    • 1.2 ingress 的优势
    • 1.3 Ingress-nginx工作原理
  • 二、实验
    • 2.1 创建ns
    • 2.2 创建deploy、service资源
    • 2.3 创建tomcat及其service
    • 2.4 检查
    • 2.5 创建Ingress-nginx资源对象
    • 2.6 在win10主机上配置映射
  • 三 示例
    • 3.1 再次访问www.test1.com:端口
    • 3.2 jenkins 常用插件
    • 3.3 使用的插件类型

一 ingress

  1. 背景
    service暴露服务的方式,在实际生产环境中不太合适:
ClusterIP的方式只能在集群内部访问。
NodePort方式的话,测试环境使用还行,当有几十上百的服务在集群中运行时,NodePort的端口管理是灾难。
LoadBalance方式受限于云平台,且通常在云平台部署ELB还需要额外的费用。
  1. 引入

ingress
ingress可以简单理解为service的service,他通过独立的ingress对象来制定请求转发的规则(路由和proxy规则),把请求路由到一个或多个service(L4)中。这样就把服务与请求规则解耦了,可以从业务维度(NGINX — 域名)统一考虑业务的暴露,而不用为每个service单独考虑。
举个例子,现在集群有api、文件存储、前端3个service,可以通过一个ingress对象来实现图中的请求转发:ingress规则是很灵活的,可以根据不同域名、不同path转发请求到不同的service,并且支持https/http(阿里云中ingress,使用了这个技术的时候,会自带给你创建一个加密的HTTPS的证书)
ng + tomcat
www.ky11.com/ ————》 Nginx
www.ky11.com/tomcat ——》tomcat
而 / 和 /tomcat ——》在ingress的yml文件中定义PATH来决定的

  1. K8S中Ingress结构 :

ingress(L7) service(L4) label selector pods
port: 80 ——》 域名1 ————————》app-service ————》app selector ————》app

1.1ingress 介绍

  1. ingress-api与ingress-controller

  2. ingress分为两个概念,ingress-api和ingress-controller

① ingress-api:指的是k8s中的一个api对象,一般用yaml配置,一般作用是定义请求如何转发到service的规则,也就是配置的规则(可根据http header、path 等进行路由转发)Ingress 控制器有各种类型,包括 Google Cloud Load Balancer, Nginx,Contour,Istio,等等。它还有各种插件
② ingress-controller:一个容器,容器中运行着负载均衡的程序,比如ingress-nginx、ingress-haproxy。ingress-controller会对ingress定义的规则(yml文件中的配置项/列表清单)进行解析(将反向代理的规则、匹配路径的方式注入到容器中负载均衡服务的配置文件中),根据配置的规则来实现请求转发。
ingress常见的部署范式
PS:考虑到的原因

ingress-controller是作为pod来运行的,以什么方式部署比较好
ingress解决了把如何请求路由到集群内部,那它自己怎么暴露给外部比较好

  1. Deployment+LoadBalancer模式的Service
    这中方式适合在公有云,用deployment部署ingress-controller,创建一个type为LoadBalancer的service关联这组pod2. Deployment+NodePort模式的Service

2.同样用deployment模式部署ingress-controller,并创建对应的服务,但是type为NodePort。这样,ingress就会暴露在集群节点ip的特定端口上。由于nodeport暴露的端口是随机端口,一般会在前面再搭建一套负载均衡器来转发请求

  1. DaemonSet+HostNetwork+nodeSelector
    用DaemonSet结合nodeselector来部署ingress-controller到特定的node上,然后使用HostNetwork直接把该pod与宿主机node的网络打通,直接使用宿主机的80/433端口就能访问服务。

1.2 ingress 的优势

1、动态配置服务
如果按照传统方式, 当新增加一个服务时, 我们可能需要在流量入口加一个反向代理指向我们新的k8s服务. 而如果用了Ingress-nginx, 只需要配置好(定义好YML文件)这个服务, 当服务启动时, 会自动注册(yml配置清单会注入到ingress 容器中的负载均衡服务的配置)到Ingress的中, 不需要而外的操作。

2、减少不必要的端口映射
配置过k8s的都清楚, 第一步是要关闭防火墙的, 主要原因是k8s的很多服务会以NodePort方式映射出去, 这样就相当于给宿主机打了很多孔, 既不安全也不优雅. 而Ingress可以避免这个问题, 除了Ingress自身服务可能需要映射出去, 其他服务都不要用NodePort方式

1.3 Ingress-nginx工作原理

1)ingress controller通过和kubernetes api交互,动态的去感知集群中ingress规则变化, ——————》动态感知变化
2)然后读取它,按照自定义的规则,规则就是写明了哪个域名对应哪个service,生成一段nginx配置, ——》动态生成配置
3)再写到nginx-ingress-controller的pod里,这个Ingress controller的pod里运行着一个Nginx服务,ingress控制器会把生成的nginx配置写入/etc/nginx.conf文件中, ——》由ingress控制器注入到nginx_pod中
4)然后reload一下使配置生效。以此达到域名分别配置和动态更新的问题。 ——>重载nginx_Pod配置

二、实验

2.1 创建ns

kubectl create ns ky11
kubectl get namespaces

2.2 创建deploy、service资源

vim httpd.yml
kind: Deployment
apiVersion: extensions/v1beta1
metadata:name: web01namespace: ky11
spec:replicas: 3 template:metadata:labels:app: httpd01spec:containers:- name: httpdimage: httpd
---
apiVersion: v1
kind: Service
metadata:name: httpd-svcnamespace: ky11
spec:selector:app: httpd01ports:- protocol: TCPport: 80targetPort: 80
--->wqkubectl apply -f httpd.yml

2.3 创建tomcat及其service

kind: Deployment
apiVersion: extensions/v1beta1
metadata:name: web02namespace: ky11
spec:replicas: 3template:metadata:labels:app: tomcat01spec:containers:- name: tomcatimage: tomcat:8.5.45
---
apiVersion: v1
kind: Service
metadata:name: tomcat-svcnamespace: ky11
spec:selector:app: tomcat01ports:- protocol: TCPport: 8080targetPort: 8080--->wqkubectl apply -f tomcat.yml

2.4 检查

kubectl get svc -n ky11CURL -I “httpd-svc”
CURL -I “tomcat-svc”

2.5 创建Ingress-nginx资源对象

  1. 下载网址:
https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml
#修改212行内容spec:                               #212行的spec字段hostNetwork: true      #添加此行,表示使用主机网络# wait up to five minutes for the drain of connectionsterminationGracePeriodSeconds: 300serviceAccountName: nginx-ingress-serviceaccountnodeSelector:kubernetes.io/os: linuxcontainers:- name: nginx-ingress-controllerimage: registry.aliyuncs.com/google_containers/nginx-ingress-controller:0.29.0
##修改以上镜像
  1. 发布、查看
kubectl  apply  -f mandatory.yamlkubectl  get  pod -n ingress-nginx -o wide############定义ingress 规则vim ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:name: test-ingressnamespace: ky11annotations:nginx.ingress.kubernetes.io/rewrite-target: /
spec:rules:- host: www.test01.comhttp:paths:- path: /backend:serviceName: httpd-svcservicePort: 80- path: /tomcatbackend:serviceName: tomcat-svcservicePort: 8080kubectl apply -f ingress.yamlkubectl get ingresses -n ky11

2.6 在win10主机上配置映射

访问www.test01.com 及www.test01.com/tomcat

PS:
在上面的访问测试中,虽然访问到了对应的服务,但是有一个弊端,就是在做DNS解析的时候,只能指定Ingress-nginx容器所在的节点IP。而指定k8s集群内部的其他节点IP(包括master)都是不可以访问到的,如果这个节点一旦宕机,Ingress-nginx容器被转移到其他节点上运行(不考虑节点标签的问题,其实保持Ingress-nginx的yaml文件中默认的标签的话,那么每个节点都是有那个标签的)。随之还要我们手动去更改DNS解析的IP(要更改为Ingress-nginx容器所在节点的IP,通过命令“kubectl
get pod -n ingress-nginx -o wide”可以查看到其所在节点)。
所以需要为Ingress-nginx规则再创建一个类型为nodePort的Service,这样,在配置DNS解析时,就可以使用www.test01.com绑定所有node节点,包括master节点的IP。

三 示例

cat service-nodeport.yaml
apiVersion: v1
kind: Service
metadata:name: ingress-nginxnamespace: ingress-nginxlabels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginx
spec:type: NodePortports:- name: httpport: 80targetPort: 80protocol: TCP- name: httpsport: 443targetPort: 443protocol: TCPselector:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginxkubectl apply -f service-nodeport.yaml
kubectl  get  svc -n ingress-nginx

3.1 再次访问www.test1.com:端口

3.2 jenkins 常用插件

 Git Parameter:这是一个参数构建扩展,可以在构建的时候选择git的某一个分支来构建服务。Docker:利用Docker容器动态创建Jenkins Slave。如果有了Kubernetes/Openshift集群,就不需要这个插件了。直接使用下面的Kubernetes插件。
jenkins非root启动的话,为了运行docker需要执行sudo chmod 777 /var/run/docker.sockKubernetes:这个插件可以将Jenkins Slave Node动态配置为Kubernetes集群上的pod。Openshift:这个插件支持调度Openshift的对象,包括触发 BuildConfig、Deployment、Scale up a Deployment,给ImageStream打新的Tag,以及创建新的对象、删除已有对象等。GitLab: 配置Gitlab的相关认证,同时也支持GitLab的Webhook触发。GitLab Hook: 支持GitLab更好的触发。Gogs WebHook: 支持Gogs代码仓库的触发。Maven:这个插件为Maven 2 / 3项目提供了高级集成功能。Pyenv Pipeline:方便对python进行项目级别的环境隔离。jenkins机器上需要安装python、pip、virtualenvPython:这个插件支持在Jenkins的构建过程中执行Python脚本。SonarQube Scanner:支持SonarQube的代码扫描。Ansible:在构建任务中可以执行Ansible任务。Publish Over SSH:通过SSH拷贝文件到目标机器,同时可以在目标机器上执行脚本Publish Over SSH:事先要在设置中添加目标机器的访问方式。Job Generator:定义一个参数化的模板,通过这个模板快速的在 Jenkins 上创建出任务Pipeline:Job:添加一个新的Job类型:Pipeline。Multijob:把多个Job组织起来。Parameterized Trigger:这是一个扩展型的插件,使各个job连接的时候可以传递一些job相关的信息。Join:这也是一个触发job的插件,亮点在于它触发job的条件是等待所有当前job的下游的job都完成才会发生。Build Pipeline:这个插件提供一个构建流水线的视图。同时它提供了一个任务的手动触发器。Monitoring监控:监控Jenkins节点的CPU、系统负载、平均响应时间和内存使用。

3.3 使用的插件类型

① 用户及权限
② 代码管理的
③ 项目视图的
④ 构建触发
⑤ 构建任务环境
⑥ 构建通知

Jenkins 用户权限管理是Jenkins Administration中非常很重要的环节,由于大部分企业都会有自己的域控管理,所以和LDAP集成并基于用户组实现权限模型设计与管理是企业级Jenkins实践的重要内容。

l  LDAP (https://plugins.jenkins.io/ldap),这个插件允许使用LDAP对用户进行认证,LDAP 服务器可以为Active Directory 或者 OpenLDAP。
l  Active Directory https://plugins.jenkins.io/active-directory,这个插件允许使用Active Directory对用户进行认证,同时结合诸如Matrix Authorization Strategy插件,可以识别用户所在的所有用户组,对用户授权进行灵活配置。
l  基于Windows Active Directory进行域管理的企业,推荐采用Active Directory。
l  GitHub Authentication https://plugins.jenkins.io/github-oauth,这个插件提供了使用GitHub进行用户认证和授权的方案。
l  Gitlab Authentication https://plugins.jenkins.io/gitlab-oauth,这个插件提供了使用GitLab进行用户认证和授权的方案。
l  Matrix Authorization Strategy https://plugins.jenkins.io/matrix-auth,这个插件提供了基于矩阵的授权策略,支持全局和项目级别的配置。
l  Role-based Authorization Strategy https://plugins.jenkins.io/role-strategy,这个插件提供了一种基于角色(Role)的用户权限管理策略,支持创建global角色、Project角色、Slave角色,以及给用户分配这些角色。这款插件是最常用的Jenkins权限策略和管理插件。
  • 代码管理

Jenkins 项目中配置Source Code Management 去下载代码进行构建任务,是非常普遍的应用场景。Jenkins插件支持很多SCM的系统,使用最常见的是Git 和SVN。

l  Git https://plugins.jenkins.io/git,支持使用Github、GitLab、Gerrit等系统管理代码仓库。
l  Subversion https://plugins.jenkins.io/subversion,支持Subversion系统管理源代码。
  • 项目及视图
    Jenkins中对Project 和 view的管理,是用户日常工作中使用很多的功能。
l  Folder https://plugins.jenkins.io/cloudbees-folder,这个插件支持用户使用目录管理项目,目录支持嵌套,并且支持目录中创建视图。
l  List view Jenkins 默认支持List类型的视图,用户可以创建List视图过滤所关心的项目。
l  Sectioned View https://plugins.jenkins.io/sectioned-view,这个插件支持一种新的视图,视图可以分为多个部分,每部分可以单独配置显示所选择的项目信息。
l   Nested View https://plugins.jenkins.io/nested-view,这个插件支持一种新的视图,其表示直接显示项目,而是以目录图标显示所包含的子视图,每个子视图显示所选项目信息。
l  Build Pipeline https://plugins.jenkins.io/build-pipeline-plugin,这个插件提供了一种Build Pipeline 视图,用于显示上、下游项目构建的关系。
  • 构建触发

Jenkins支持多种Build 触发方式,尤其一些自动化触发方式非常有用

l  Build periodically,Jenkins 内置功能,可以设置类似crontab时间,周期性地自动触发构建。
l  Poll SCM,Jenkins 内置功能,类似Build periodically,可以设置类似crontab时间,不同的是不是直接进行构建,而是周期性地在后台检查所配置的SCM有没有更新,只有当有代码更新时才会触发构建。
l  Trigger builds remotely (e.g., from scripts),Jenkins 内置功能,远程触发构建,通过设置token可以支持远程脚本中触发Jenkins构建。
l  Gerrit Trigger https://plugins.jenkins.io/gerrit-trigger,这个插件将Jenkins集成到Gerrit code review中,支持Jenkins配置Gerrit服务器等信息,实现Gerrit event 触发Jenkins 构建。
l  GitLab https://plugins.jenkins.io/gitlab-plugin,    这个插件将Jenkins 集成到GitLab web hook中,支持Gitlab 分支及Merge Request等相关事件触发Jenkins构建。
l  GitHub Integration https://plugins.jenkins.io/github-pullrequest ,这个插件将Jenkins集成到GitHub中,支持Gitgub分支及Pull requests 触发Jenkins 构建。
l  JIRA Trigger https://plugins.jenkins.io/jira-trigger,这个插件将Jenkins集成到Jira WebHooks中,支持Jira issue的状态等变化时触发Jenkins构建。
  • 构建参数

Jenkins除了支持普通的参数类型(布尔型、字符串型、多行文本型、选择型和文件型 )外,还有一些插件支持更加丰富实用的参数类型,比如参数间动态关联、多层级参数、隐藏参数等 。

l  nodelabelparameter  https://plugins.jenkins.io/nodelabelparameter,这个插件增加了一个新的参数类型,Node 和 Label,从而使用户通过参数可以选择项目构建运行的节点。
l  其他插件不一一列举,可以查看插件说明
Ø  https://plugins.jenkins.io/hidden-parameterØ  https://plugins.jenkins.io/extended-choice-parameterØ  https://plugins.jenkins.io/validating-string-parameterØ  https://plugins.jenkins.io/extensible-choice-parameterØ  https://wiki.jenkins.io/display/JENKINS/Active+Choices+Plugin
  • 构建任务及环境

围绕构建任务,有许多小的插件,却提供了一些实用的功能

l  Workspace Cleanup https://plugins.jenkins.io/ws-cleanup,这个插件支持在构建前后 删除或者部分删除workspace
l  description setter https://plugins.jenkins.io/description-setter,这个插件支持正则表达式匹配构建log输出,设置构建的描述
l  build-name-setter https://plugins.jenkins.io/build-name-setter,这个插件支持设置构建的显示名字,而不是默认的为#1,#2,……,#buildnum
l  Environment Injector https://plugins.jenkins.io/envinject,这个插件支持在构建任务的不同阶段插入环境变量,并且在构建结束导出所有的环境变量等功能。
  • 构建通知

把构建状态及时地通知用户,是Jenkins的一个必不可少的功能。Jenkins支持多种主动和被动的通知方式。

l  Mailer  https://plugins.jenkins.io/mailer,这个插件支持基本的邮件通知功能,比如构建失败和构建恢复成功可以发送邮件通知给相关人员。
l  Email Extension https://plugins.jenkins.io/email-ext,这个插件是邮件通知的扩展,支持定制邮件内容,触发条件以及邮件接收者,功能比基本邮件通知要灵活强大的多。
l  Slack Notification https://plugins.jenkins.io/slack,这个插件支持把构建结果推送到Slack channel。
容器化Slave
Jenkins的Master-Slave架构实现了分布式构建,可以充分的横向扩展Slave来提升构建能力,将Slave容器化是目前主流的构建环境标准化、集群化和弹性化的方式。l  https://plugins.jenkins.io/docker-plugin,这个插件可以配置docker host ,从而动态的提供Jenkins Agent(Slave),运行构建后再销毁这个slave。
l  https://plugins.jenkins.io/kubernetes,这个插件支持利用Kubernetes  cluster 动态的提供Jenkins Agent(Slave),利用Kubernetes 调度机制来优化Jenkins 负载等。
  • gAdmin相关插件
l  Configuration Slicing  https://plugins.jenkins.io/configurationslicing,这个插件支持批量修改项目配置
l  Mask Passwords https://plugins.jenkins.io/mask-passwords,这个插件支持遮挡构建log输出的password等敏感信息
l  Backup https://plugins.jenkins.io/backup,这个插件添加备份功能到Jenkins management

k8s!Ingress服务相关推荐

  1. 通过阿里云容器服务K8S Ingress Controller实现应用服务的灰度发布

    简介 日常工作中我们经常需要对服务进行版本更新升级,为此我们经常使用到的发布方式有滚动升级.分批暂停发布.蓝绿发布以及灰度发布,今天主要跟大家分享下在阿里云容器服务Kubernetes集群中如何通过I ...

  2. k8s 安装ingress nginx controller 并部署.net core ingress服务

    192.168.28.132 k8smaster 192.168.28.133 k8snode1 192.168.28.134 k8snode2 192.168.28.135 k8snode3 192 ...

  3. 使用k8s Ingress暴露gRPC服务

    Kubernetes 暴露服务的方式目前只有三种:LoadBlancer Service.NodePort Service.Ingress:前两种估计都应该很熟悉,下面详细的了解下这个 Ingress ...

  4. nginx 集群部署_入门级实操教程!从概念到部署,全方位了解K8S Ingress!

    Kubernetes Ingress用于添加规则,以将流量从外部路由到Kubernetes集群的服务中.在本文中你将了解ingress 的概念,以及用于路由外部流量到Kubernetes deploy ...

  5. K8s Ingress Provider 为什么选择 MSE 云原生网关?

    作者:如葑 K8s Ingress 简介 K8s 集群内的网络与外部是隔离的,即在 K8s 集群外部无法直接访问集群内部的服务,如何让将 K8s 集群内部的服务提供给外部用户呢?K8s 社区有三种方案 ...

  6. Blazor+Dapr+K8s微服务之基于WSL安装K8s集群并部署微服务

     前面文章已经演示过,将我们的示例微服务程序DaprTest1部署到k8s上并运行.当时用的k8s是Docker for desktop 自带的k8s,只要在Docker for desktop中启用 ...

  7. 通过阿里云K8S Ingress Controller实现路由配置的动态更新

    简介 在Kubernetes集群中,Ingress作为集群内服务对外暴露的访问接入点,其几乎承载着集群内服务访问的所有流量.我们知道,Nginx Ingress Controller是Kubernet ...

  8. 【云原生 • Kubernetes】认识 k8s 网络、外部网络访问 k8s 内部服务

    目录 一.认识 Kubernetes 网络 二.外部网络如何访问 k8s 内部服务 1. NodePort 2. Load Balancer 3. Ingress 一.认识 Kubernetes 网络 ...

  9. k8s 之服务发现(service)

    文章目录 k8s 之服务发现(service) 一.基本概念 二.类型介绍 Service 在 K8S 中有以下四种类型 三.代理模式 userspace 代理模式 iptables 代理模式 ipv ...

  10. 《docker+k8s微服务容器化实践》笔记2

    5-3 集群环境搭建_A  5-4 集群环境搭建_B  5-5 集群环境搭建_C 这次开始动手操作,首先是Mesos的安装,怎么来安装Mesos.源码:https://github.com/limin ...

最新文章

  1. Pytorch-学习记录 卷积操作——Tensor.size()
  2. 汇编程序开发环境搭配
  3. ceph monitor----paxos算法1
  4. php网站挂linux,Linux环境下php实现给网站截图的方法
  5. Dojo API略解续
  6. 07 | 链表(下):如何轻松写出正确的链表代码?
  7. 用自定义注解做点什么——自定义注解有什么用
  8. Oracle体系结构四(学习笔记)
  9. bzoj 4002: [JLOI2015]有意义的字符串
  10. c3p0 服务启动获取连接超时_c3p0获取连接Connection后的Close()---释疑
  11. 在对比中理解 Node
  12. 新浪微博2020Java校招笔试题
  13. HTML5移动应用开发为什么需要引入前端工程化
  14. 小米3c路由器拆机_小米AC2350无线路由器拆机-路由器交流
  15. python爬京东联盟_PHP调用京东联盟开普勒、宙斯API模板
  16. python求平方根的代码_python求平方根的方法
  17. linux查看主机配置命令,如何查看Linux 硬件配置信息
  18. Git基础-生成SSH密钥+配置密钥到远程仓库中
  19. SCI论文结构化阅读法
  20. php微信转发无法显示标题图片,解决微信公众号分享朋友圈不显示标题图片描述的方法...

热门文章

  1. go 错误处理与测试
  2. R语言 观测异常值并改进
  3. 北斗导航 | ION GNSS+ 2014到 ION GNSS+ 2017会议论文下载:ION 美国导航学会
  4. 镭速发布文件直传新功能,实现端到端快速传输
  5. 镭速(Raysync)文件传输高可用安装部署介绍!
  6. 我是一名资深程序员,而今天我又多了一个创业者的身份(2)
  7. 办公实用技巧:利用迅捷画图绘制网络拓扑图操作方法介绍
  8. 微信小程序 | 小程序WXSS-WXML-WXS
  9. 聊聊志愿填报那点事儿
  10. oracle dul 扫描磁盘,dul oracle 数据恢复