11月初,KubeSphere 发布了 3.2.0 版本,新版本为项目网关增配了整套监控及管理页面,同时引入了集群网关来提供集群层面全局的 Ingress 网关能力。

为了让用户更了解如何在新版 KubeSphere 中部署使用第三方 Ingress Controller,本文将以 Apache APISIX Ingress Controller 为例,为大家展示通过 KubeSphere 快速为 Kubernetes 集群使用不同类型的网关并进行状态监控。

准备工作

安装 KubeSphere

安装 KubeSphere 有两种方法:

  • 在 Linux 上直接安装

  • 在已有 Kubernetes 中安装[2]

KubeSphere 最小化安装版本已经包含了监控模块,因此不需要额外启用,可以通过「系统组件」页面中的「监控」标签页确认安装状态。

部署 httpbin 演示应用

由于需要演示网关的访问控制能力,我们必须要先有一个可以访问的应用作为网关的后台服务。这里我们使用 httpbin.org 提供的 kennethreitz/httpbin 容器应用作为演示应用。

在 KubeSphere 中,我们可以先创建新的项目或使用已有的项目,进入项目页面后,选择「应用负载」下的「服务」直接创建无状态工作负载并生成配套服务。

使用 kennethreitz/httpbin 容器默认的 80 端口作为服务端口,创建完成后确保在「工作负载」和「服务」页面下都可以看到 httpbin 的对应条目,如下图所示。

项目网关细节补充

项目网关是 KubeSphere 3.0 之后上线的功能:KubeSphere 项目中的网关是一个 NGINX Ingress 控制器。KubeSphere 内置用于 HTTP 负载均衡的机制称为应用路由,它定义了从外部到集群服务的连接规则。如需允许从外部访问服务,用户可创建路由资源来定义 URI 路径、后端服务名称等信息。

承接上文中已部署的 httpbin 服务项目,在「项目设置」中打开「网关设置」页面,然后执行「开启网关」操作。方便起见,直接选择 NodePort 作为「访问方式」即可。

确定后回到网关页面,稍等片刻后刷新页面,可以得到如下图显示的部署完成状态,在这里可以看到 NodePort 默认被赋予了两个节点端口。接招我们通过右上角的「管理」按钮「查看详情」。

此时我们看到的便是 3.2.0 版本关于项目/集群网关的新监控页面。下面我们就需要为 httpbin 服务创建应用路由。

从「应用负载」进入「应用路由」页面,开始「创建」路由。为路由取名为 httpbin 后,我们指定一个方便测试的域名,并设置「路径」为 /, 选择「服务」httpbin 和「端口」80

直接下一步跳过高级设置后完成路由创建,可以得到如下图所示的 httpbin 应用路由项。

接下来我们就可以通过项目网关的 NodePort 地址及指定域名(如这里是 http://httpbin.ui:32516)来访问 httpbin 应用服务,随意刷新或操作一下页面的请求生成功能,再进入网关的详情页面,便可以看到在「监控」面板上已经出现了网关的一些内置的监控指标展示。

指定 NodePort 节点端口

对于公有云环境,如果使用 NodePort 方式向外暴露访问能力,开放端口通常是有限且受控的,因此对于网关所使用的 NodePort 我们需要对它进行修改。

由于网关是被 KubeSphere 统一管理的,要修改网关服务的 NodePort 需要具备访问 kubesphere-controls-system 的项目权限。进入该项目后,通过「应用负载」的「服务」页面即可找到命名为 kubesphere-router-<project-namespace> 形式且外部访问已开放 NodePort 的网关服务。NodePort 服务端口需要通过「编辑 YAML」来直接修改。

开始使用集群网关

KubeSphere 3.2.0 开始支持集群级别的全局网关,所有项目可共用同一个网关,之前已创建的项目网关也不会受到集群网关的影响。也可以统一纳管所有项目的网关,对其进行集中管理和配置,管理员用户再也不需要切换到不同的企业空间中去配置网关了。

如果您使用的是 KubeSphere 3.2.0 版本,我们更推荐大家使用集群网关的功能来统一整个集群的应用路由。要启用集群网关也非常简单:使用具备集群管理权限的账号,进入其可管理的某个集群(如我们这里以 default 集群为例),在「集群设置」的「网关设置」中即可「开启网关」,同时查看「项目网关」。

集群网关开启的方式以及对齐 NodePort 访问端口的修改和之前项目网关的操作基本完全一致,这里就不多赘述了。

但有一点需要特别注意:集群网关开启后,已经开启的项目网关还会保留;但尚未创建网关的项目是无法再创建单独的网关的,会直接使用集群网关。

下图展示了已创建网关的项目,在同时拥有项目及集群网关后,在「网关设置」页面所呈现的所有网关概览。

快速使用 Apache APISIX Ingress Controller

Apache APISIX 是一款开源的高性能、动态云原生网关,由深圳支流科技有限公司于 2019 年捐赠给 Apache 基金会,目前已成为 Apache 基金会的顶级开源项目,也是 GitHub 上最活跃的网关项目。Apache APISIX 目前已覆盖 API 网关、LB、Kubernetes Ingress、Service Mesh 等多种场景。

如何部署

首先添加 Apache APISIX Helm Chart 仓库。之后选定一个企业空间,通过「应用管理」下的「应用仓库」来添加如下一个 Apache APISIX 的仓库(仓库 URL:https://charts.apiseven.com)。

接下来创建一个名为 apisix-system 的项目。进入项目页面后,选择在「应用负载」中创建「应用」的方式来部署 Apache APISIX,并选择 apisix 应用模版开始进行部署。

为何是直接部署 Apache APISIX 应用的 Helm Chart,而不是直接部署 Apache APISIX Ingress Controller?这是因为 Apache APISIX Ingress Controller 目前和 Apache APISIX 网关是强关联的(如下图所示),且目前通过 Apache APISIX Helm Charts 同时部署 Apache APISIX Gateway + Dashboard + Ingress Controller 是最方便的,因此本文推荐直接使用 Apache APISIX 的 Helm Chart 进行整套组件的部署。

将应用命名为 apisix 以避免多个组件(Gateway, Dashboard, Ingress Controller)的工作负载及服务名称产生不匹配的情况;在安装步骤中编辑的「应用设置」的部分,请参照以下配置进行填写(请特别注意带有【注意】标记的注释部分的说明,其余可以按需自行编辑修改)。

global:imagePullSecrets: []apisix:enabled: truecustomLuaSharedDicts: []image:repository: apache/apisixpullPolicy: IfNotPresenttag: 2.10.1-alpinereplicaCount: 1podAnnotations: {}podSecurityContext: {}securityContext: {}resources: {}nodeSelector: {}tolerations: []affinity: {}podAntiAffinity:enabled: falsenameOverride: ''
fullnameOverride: ''gateway:type: NodePortexternalTrafficPolicy: Clusterhttp:enabled: trueservicePort: 80containerPort: 9080tls:enabled: falseservicePort: 443containerPort: 9443existingCASecret: ''certCAFilename: ''http2:enabled: truestream:enabled: falseonly: falsetcp: []udp: []ingress:enabled: falseannotations: {}hosts:- host: apisix.localpaths: []tls: []admin:enabled: truetype: ClusterIPexternalIPs: []port: 9180servicePort: 9180cors: truecredentials:admin: edd1c9f034335f136f87ad84b625c8f1viewer: 4054f7cf07e344346cd3f287985e76a2allow:ipList:- 0.0.0.0/0plugins:- api-breaker- authz-keycloak- basic-auth- batch-requests- consumer-restriction- cors- echo- fault-injection- grpc-transcode- hmac-auth- http-logger- ip-restriction- ua-restriction- jwt-auth- kafka-logger- key-auth- limit-conn- limit-count- limit-req- node-status- openid-connect- authz-casbin- prometheus- proxy-cache- proxy-mirror- proxy-rewrite- redirect- referer-restriction- request-id- request-validation- response-rewrite- serverless-post-function- serverless-pre-function- sls-logger- syslog- tcp-logger- udp-logger- uri-blocker- wolf-rbac- zipkin- traffic-split- gzip- real-ip#【注意】添加此插件以配合 Dashboard 展示服务信息- server-infostream_plugins:- mqtt-proxy- ip-restriction- limit-conncustomPlugins:enabled: trueluaPath: /opts/custom_plugins/?.lua#【注意】如下配置保障 Prometheus 插件可对外暴露指标plugins:- name: prometheusattrs:export_addr:ip: 0.0.0.0port: 9091configMap:name: prometheusmounts: []dns:resolvers:- 127.0.0.1- 172.20.0.10- 114.114.114.114- 223.5.5.5- 1.1.1.1- 8.8.8.8validity: 30timeout: 5autoscaling:enabled: falseminReplicas: 1maxReplicas: 100targetCPUUtilizationPercentage: 80targetMemoryUtilizationPercentage: 80configurationSnippet:main: ''httpStart: ''httpEnd: ''httpSrv: ''httpAdmin: ''stream: ''etcd:enabled: truehost:- 'http://etcd.host:2379'prefix: /apisixtimeout: 30auth:rbac:enabled: falseuser: ''password: ''tls:enabled: falseexistingSecret: ''certFilename: ''certKeyFilename: ''verify: trueservice:port: 2379replicaCount: 3dashboard:enabled: true#【注意】为 Dashboard 开启 NodePort 方便后续使用service:type: NodePortingress-controller:enabled: trueconfig:apisix:#【注意】一定要设置 gateway 所在的 namespaceserviceNamespace: apisix-systemserviceMonitor:enabled: truenamespace: 'apisix-system'interval: 15s

部署成功后,点击应用名称进入详情页面,可以在「资源状态」标签页下看到如下的服务部署和工作状态运行状态展示。

想在 KubeSphere 中进行自定义监控?来瞧瞧这相关推荐

  1. Entity Framework 6 Recipes 2nd Edition(10-5)译 - 在存储模型中使用自定义函数

    10-5. 在存储模型中使用自定义函数 问题 想在模型中使用自定义函数,而不是存储过程. 解决方案 假设我们数据库里有成员(members)和他们已经发送的信息(messages) 关系数据表,如Fi ...

  2. 深入体验JavaWeb开发内幕——简述JSP中的自定义标签叫你快速学会

    转载自   深入体验JavaWeb开发内幕--简述JSP中的自定义标签叫你快速学会 自定义标签,顾名思义,就是自己定义的标签.那么我们为什么要自己定义一些标签呢? 我们知道,如果要在JSP中获取数据我 ...

  3. php 模板 自定义函数调用,thinkphp模板中使用自定义函数

    注意:自定义函数要放在项目应用目录/common/common.php中. 这里是关键. 模板变量的函数调用格式:{$varname|function1|function2=arg1,arg2,### ...

  4. php蛋糕文字生成二维码,蛋糕PHP中的自定义分页

    我是cakePHP的初学者,我不想在cakePHP中创建自定义分页. 函数$paginator-> numbers();它显示如下页码: 1 | 2 | 3 | 4 | ... 通过查看选项,有 ...

  5. 在 KubeSphere 中监控集群外部 Etcd

    作者:张延英(老Z),电信系统集成公司山东分公司运维架构师,云原生爱好者,目前专注于云原生运维. 1. 本文简介 本文源于 KubeSphere 开源社区 8 群里的一个小伙伴 @Jam 提到的 Ec ...

  6. fritz 使用手册_Fritz对象检测指南:使用机器学习在Android中构建宠物监控应用

    fritz 使用手册 by Eric Hsiao 萧敬轩 Fritz对象检测指南:使用机器学习在Android中构建宠物监控应用 (A guide to Object Detection with F ...

  7. zabbix的自定义监控

    进程和日志 有的时候zabbix提供的监控项目,不能满足我们生产环境下的监控需求,此时我们就要按照zabbix的规范自定义监控项目,达到监控的目的 zabbix_get:模拟zabbix_server ...

  8. 使用 Docker 安装 Zabbix,并配置自定义监控项

    使用 Docker 安装 Zabbix,并配置自定义监控项 一.Zabbix 简介 1.监控功能 2.Zabbix 工作原理 3.Zabbix 组件 4.Zabbix 进程 二.使用 Zabbix 配 ...

  9. Docker下Prometheus和Grafana三部曲之三:自定义监控项开发和配置

    本文是<Docker下Prometheus和Grafana三部曲>的终篇,前面的文章中,我们体验了快速搭建监控环境,也揭示了如何编排Docker容器来简化环境搭建过程,在监控系统中有个业务 ...

最新文章

  1. HDU 6435 CSGO 求多维曼哈顿最远距离
  2. liferay如何debug
  3. 编写DLL所学所思(1)——导出函数
  4. legend函数_ggplot的图例(legend)管理
  5. maven 学习笔记--仓库,聚合和继承,私服搭建
  6. php中去除数组中空值,php如何去除数组中空值
  7. (转载)高速ADC的关键指标:量化误差、offset/gain error、DNL、INL、ENOB、分辨率、RMS、SFDR、THD、SINAD、dBFS、TWO-TONE IMD...
  8. 本地KMS虚拟服务器,搭建kms本地服务器
  9. fat32文件系统格式在linux,FAT32文件系统的存储组织结构(一)
  10. 明日之后 找不到服务器,《明日之后》无法连接服务器怎么解决 服务器无法连接解决方法...
  11. 大数据基础之常用Linux命令
  12. 九年义务教育的精英,遇上十年寒窗苦读的翘楚,必将擦出耀眼的火花!
  13. SQL_电力抢修工程插入数据语句
  14. 虚化背景 - 基于镜头模糊滤镜的深度映射
  15. 英语六级仔细阅读中的陷阱
  16. 简单易懂SpringBoot和Android上传和下载文件方案——采用URL
  17. 各网络厂商MIB库获取
  18. python字典推导式_python的各种推导式(列表推导式、字典推导式、集合推导式)...
  19. tp5查出年度数据报表 记录一下坑
  20. python使用日常备忘录

热门文章

  1. IT技术超级群(容纳500人) Group:47744707 (齐聚各方高手)
  2. Object Oriented Programming(1)
  3. 「无服务器架构」动手操作Knative -第二部分
  4. unity导出android,可以显示出MMD模型,但是不能播放动作。求解答
  5. 大数据面试之kafka重点(二)
  6. Eassy-Jun.25
  7. vba ado的一些封装
  8. selenium 操作日期控件
  9. 以太网交换机 VLAN 生成树协议
  10. 史上最全SD-WAN供应方大盘点(下)