
后端程序员,开源PHP框架PhalApi核心开发者,编写录制phalapi教程,phalcon爱好者编写phalcon教程以及zephir文档翻译,热爱交流沟通,喜欢go语言,欢迎大家一起交流沟通,探讨技术,座右铭:代码即真理,你的真理是什么呢?
能力说明:
能够开发出高质量的代码。能够熟练使用Golang的高级特性,各种应用框架和测试框架。
能力说明:
掌握计算机基础知识,初步了解Linux系统特性、安装步骤以及基本命令和操作;具备计算机基础网络知识与数据通信基础知识。
暂时未有相关云产品技术能力~
阿里云技能认证
详细说明Wayne是笔者无意之间刷文章了解到的,简单使用之后发现能解决当前眼下诸多问题,出于推动公司容器化进程的原因选择开始使用,当前所有环境都已经在使用中。借助官方的介绍Wayne 是一个通用的、基于 Web 的 Kubernetes 多集群管理平台。通过可视化 Kubernetes 对象模板编辑的方式,降低业务接入成本,拥有完整的权限管理系统,适应多租户场景,是一款适合企业级集群使用的发布平台。 附上: 喵了个咪的博客:w-blog.cn wayne官方Git地址:https://github.com/Qihoo360/wayne/blob/master/README-CN.md PS:当前最新版本 v1.8.6,官方暂时不支持版本升级能力,不要轻易尝试版本升级; Wayne 已大规模服务于 360 搜索,承载了内部绝大部分业务,稳定管理了近千个业务,上万个容器,运行了两年多时间,经受住了生产的考验。 一、Wayne介绍 要引入任何一个工具首先需要看到问题,如果盲目的引入工具提出要求,有时候不但达不到效果还增加了研发成本。 当时笔者在公司推动容器化陷入了一个僵局,环境都已经准备好了,但是有很多遗留的包袱需要迁移里面就涉及到如下的难点了: 基础yaml文件难以管理,之前使用git维护不便/更新迟滞 开发水平不一,编写yaml文件经常出现各种问题 开发环境需要排查问题登录容器shell,需要查看日志 使用K8S-Dashbord权限无法把控,开发人员会不小心删除了别人内容 强制资源限制,避免开发使用资源过度,优化不足 和CI/CD对接,自动化更新不依赖于kubectl避免控制权泄露 测试/集成/预发/生产,多环境管理难,原生Dashbord使用繁琐 当面临到一定规模的容器化场景都会多多少少遇到这些问题,估计360也是遇到了这些问题但是并没有特别好的解决方案才开发了这套系统。 多租户隔离支持LDAP,完备权限体系,命名空间 -> 项目 -> 资源 我们已团队建设出多个命名空间对应K8S的命名空间,项目作为团队内部的项目分组,在到对应不同的资源 PS:这里推荐两种区分环境的方法: 一种是多环境绑定在一起,通过部署名称来区分环境,并且分离测试集成(开发自助)和预发生产(运维管理)Wayne实例,保障不越权,避免误操作(推荐); 另外一种就是全部运维管理,通过一套模板控制所有环境; 基于独立数据库的Yaml配置存储,强制资源限制 OpenApi+Token校验机制提供足够灵活性 支持多集群同时管理,在线WebShell+日志查看能力 Wayne架构图 Wayne整体采用前后端分离的方案,其中前端采用 Angular 框架进行数据交互和展示,使用 Ace 编辑器进行 Kubernetes 资源模版编辑。后端采用 Beego 框架做数据接口处理,使用 Client-go 与 Kubernetes 进行交互,数据使用 MySQL 存储。 二、Wayne安装 需要准备好 docker 环境 和 docker-compose 可以参考笔者之前的文章: git clone https://github.com/Qihoo360/wayne.git cd wayne/hack/docker-compose 配置文件修改 wayne分为两个组件 wayne-backend 和 wayne-frontend wayne-backend:主要API wayne-frontend:WEB界面 锁定版本,如果使用latest可能会遇到版本更新导致的不兼容,最新版本 v1.8.6 上一稳定版本 v1.7.1都可以选择 vim docker-compose.yaml image: 360cloud/wayne-backend:v1.8.6 image: 360cloud/wayne-frontend:v1.8.6 Wayne采用前后端分离方式,如果需要在内网或外网访问wayne系统需要访问地址配置,本地测试可以先用localhost vim conf/config.js window.CONFIG = { URL: 'http://yourip:8080', RAVEN: false, RAVEN_DSN: 'RAVEN_DSN' }; 运行程序 docker-compose up -d Creating docker-compose_mysql_1 ... done Creating docker-compose_wayne-backend_1 ... done Creating docker-compose_wayne-frontend_1 ... done 访问 http://localhost:4200/ 即可,默认用户名密码admin: 配置独立Mysql运行 一般来说我们会使用独立mysql来存储元数据保障数据的稳定,如果Wayne丢失了数据库回复会非常的麻烦 删除配置文件中的mysql和 link vim docker-compose.yaml mysql: image: mysql:5.6.41 environment: MYSQL_ROOT_PASSWORD: "root" networks: - default expose: - "3306" ports: - "3306:3306" rabbitmq: environment: RABBITMQ_NODENAME: "rabbit" RABBITMQ_DEFAULT_USER: "guest" RABBITMQ_DEFAULT_PASS: "guest" image: rabbitmq:3.7.8-management networks: - default expose: - "5672" ports: - "5672:5672" depends_on: - mysql 修改配置文件 vim conf/app.conf # database configuration: ## mysql DBName = "wayne" DBTns = "tcp(mysql:3306)" DBUser = "root" DBPasswd = "root" DBLoc = "Asia%2FShanghai" DBConnTTL = 30 OAuth2 OR LDAP vim conf/app.conf # oauth2 [auth.oauth2] enabled = false redirect_url = "https://www.wayne.cloud" client_id = client client_secret = secret auth_url = https://example.com/oauth2/v1/authorize token_url = https://example.com/oauth2/v1/token api_url = https://example.com/oauth2/v1/userinfo # If your OAuth 2.0-based authorization service does not have email, name, and dispaly fields, use mapping criteria. api_mapping = name:name,email:email,display:display # ldap config # enable ldap login [auth.ldap] enabled = false ldap_url = ldap://127.0.0.1 ldap_search_dn = "cn=admin,dc=example,dc=com" ldap_search_password = admin ldap_base_dn = "dc=example,dc=com" ldap_filter = ldap_uid = cn ldap_scope = 2 ldap_connection_timeout = 30
我们会经常提到BI系统(Business Intelligence),它是一个重要的数据出入口,帮助数据,帮助企业获取数据表报制定战略决策。大家熟知的有FineBI和Microsoft的powerBI,但是使用成本都不低需要授权需要客户端,使用配置也相当繁琐。笔者今天给大家带来的是一款开源纯Web网页的数据工具。 附上: 喵了个咪的博客:w-blog.cn Redash官方Git地址:https://github.com/getredash/redash Redash官方文档:https://redash.io/help/ PS:当前最新版本为V8版本,低版本向高版本升级会存在一些奇怪问题请做好备份在进行升级 一、redash介绍 作为一名软件工程师最头大的就是,产品不停的要求拉这种数据哪种数据,或者是提了一堆数据报表的需求一直写CURD没有技术含量,重复的事情就应该用工具来解决,甚至于让产品去自助解决。笔者也一直在找工具,来解决整个公司研发在数据输出问题,一个不经意的机会发现Redash这个开源组件。当然选择Redash也有它自身的优势。 对于一个BI来说最重要的是支持的数据源的种类,Redash支持超过35个数据源,几乎可以满足所有的场景: 主流的MySQL、PostgreSQL、MongoDB、SQL Server等 大数据数据库Hive、Impala、Presto等 新型数据库ClickHouse、CockroachDB、InfluxDB等 自定义Python脚本、URL请求等 Redash包含两个部分: 查询编辑器:考虑使用JS Fiddle进行SQL查询。通过共享数据集和生成数据的查询,您可以以开放的方式共享组织中的数据。这样,每个人都可以不仅查看结果数据集,而且可以查看生成它的过程。也可以将其分叉并生成新的数据集并获得新的见解。 可视化和仪表板:一旦有了数据集,就可以从中创建不同的可视化文件,然后将多个可视化文件组合到一个仪表板中。目前Redash支持图表,数据透视表,队列和更多。 二、redash安装 Ubuntu 完整安装方式如果是ubuntu直接跑官方的命令: git clone https://github.com/getredash/setup.git cd setup // 步骤一 安装docker // 步骤二 创建数据库映射目录 // 步骤三 创建基础配置文件 // 步骤四 安装docker-composer初始化数据库,运行Redash ./setup.sh 笔者平时使用ubuntu比较少,centos是平时主要用的系统,笔者根据官方的安装方式整理了一套基本有docker就可以安装的教程,前提准备好 docker 和 docker-composer,可以参考笔者之前的文章: mkdir redashsetup cd redashsetup/ // 创建数据库映射目录和基础配置文件 vim redashenv.sh #!/usr/bin/env bash # This script setups dockerized Redash on Ubuntu 18.04. set -eu mkdir /opt/redash mkdir /opt/redash/postgres-data REDASH_BASE_PATH=/opt/redash if [[ -e $REDASH_BASE_PATH/env ]]; then rm $REDASH_BASE_PATH/env touch $REDASH_BASE_PATH/env fi COOKIE_SECRET=$(pwgen -1s 32) SECRET_KEY=$(pwgen -1s 32) POSTGRES_PASSWORD=$(pwgen -1s 32) REDASH_DATABASE_URL="postgresql://postgres:${POSTGRES_PASSWORD}@postgres/postgres" echo "PYTHONUNBUFFERED=0" >> $REDASH_BASE_PATH/env echo "REDASH_LOG_LEVEL=INFO" >> $REDASH_BASE_PATH/env echo "REDASH_REDIS_URL=redis://redis:6379/0" >> $REDASH_BASE_PATH/env echo "POSTGRES_PASSWORD=$POSTGRES_PASSWORD" >> $REDASH_BASE_PATH/env echo "REDASH_COOKIE_SECRET=$COOKIE_SECRET" >> $REDASH_BASE_PATH/env echo "REDASH_SECRET_KEY=$SECRET_KEY" >> $REDASH_BASE_PATH/env echo "REDASH_DATABASE_URL=$REDASH_DATABASE_URL" >> $REDASH_BASE_PATH/env chmod -R 777 redashenv.sh ./redashenv.sh cat /opt/redash/env PYTHONUNBUFFERED=0 REDASH_LOG_LEVEL=INFO REDASH_REDIS_URL=redis://redis:6379/0 POSTGRES_PASSWORD=XjGVGggWXHIRyOP5bOaVsPQ8AKunVsuX REDASH_COOKIE_SECRET=9hihbX7BTziWKO7kolldC486QFoo5aU2 REDASH_SECRET_KEY=tyS5wWdp8l4gq2YPw9sbrnJwaKbVdeEp REDASH_DATABASE_URL=postgresql://postgres:XjGVGggWXHIRyOP5bOaVsPQ8AKunVsuX@postgres/postgres 如果需要使用邮件相关功能,如用户邀请,密码重置,警报触发时等等功能需要增加如下配置: vim /opt/redash/env REDASH_MAIL_SERVER (default: localhost) REDASH_MAIL_PORT (default: 25) REDASH_MAIL_USE_TLS (default: false) REDASH_MAIL_USE_SSL (default: false) REDASH_MAIL_USERNAME (default: None) REDASH_MAIL_PASSWORD (default: None) REDASH_MAIL_DEFAULT_SENDER (Email address to send from) version: "2" services: server: image: redash/redash:8.0.0.b32245 depends_on: - postgres - redis environment: PYTHONUNBUFFERED: 0 REDASH_LOG_LEVEL: "INFO" REDASH_REDIS_URL: "redis://redis:6379/0" REDASH_DATABASE_URL: "postgresql://postgres@postgres/postgres" REDASH_RATELIMIT_ENABLED: "false" REDASH_WEB_WORKERS: 4 restart: always command: server ports: - "5000:5000" scheduler: image: redash/redash:8.0.0.b32245 depends_on: - postgres - redis environment: PYTHONUNBUFFERED: 0 REDASH_LOG_LEVEL: "INFO" REDASH_REDIS_URL: "redis://redis:6379/0" REDASH_DATABASE_URL: "postgresql://postgres@postgres/postgres" REDASH_RATELIMIT_ENABLED: "false" QUEUES: "celery" WORKERS_COUNT: 1 restart: always command: scheduler scheduled_worker: image: redash/redash:8.0.0.b32245 depends_on: - postgres - redis environment: PYTHONUNBUFFERED: 0 REDASH_LOG_LEVEL: "INFO" REDASH_REDIS_URL: "redis://redis:6379/0" REDASH_DATABASE_URL: "postgresql://postgres@postgres/postgres" REDASH_RATELIMIT_ENABLED: "false" QUEUES: "scheduled_queries,schemas" WORKERS_COUNT: 1 restart: always command: worker adhoc_worker: image: redash/redash:8.0.0.b32245 depends_on: - postgres - redis environment: PYTHONUNBUFFERED: 0 REDASH_LOG_LEVEL: "INFO" REDASH_REDIS_URL: "redis://redis:6379/0" REDASH_DATABASE_URL: "postgresql://postgres@postgres/postgres" REDASH_RATELIMIT_ENABLED: "false" QUEUES: "queries" WORKERS_COUNT: 2 restart: always command: worker redis: image: redis:5.0-alpine restart: always postgres: image: postgres:9.6-alpine env_file: /opt/redash/env volumes: - /opt/redash/postgres-data:/var/lib/postgresql/data restart: always nginx: image: redash/nginx:latest ports: - "8880:80" depends_on: - server links: - server:redash restart: always 初始化数据库依赖: docker-compose run --rm server create_db Creating network "data_default" with the default driver Creating data_redis_1 ... done Creating data_postgres_1 ... done [2019-10-31 04:43:15,422][PID:1][INFO][alembic.runtime.migration] Context impl PostgresqlImpl. [2019-10-31 04:43:15,422][PID:1][INFO][alembic.runtime.migration] Will assume transactional DDL. [2019-10-31 04:43:15,437][PID:1][INFO][alembic.runtime.migration] Running stamp_revision -> e5c7a4e2df4d 启动redash: docker-compose up -d 通过nginx的8880端口即可访问,接下来就可以配置管理员账号的用户名和密码开始使用了: 在使用上的一些建议 一个用户一个账号,不混用账号 使用分组功能赋予对应权限,按照业务区分权限 数据库的配置使用只读账号配置,避免从BI系统获得数据库高权限 数据库的账号只给单库权限,甚至于给到单表权限控制数据,尽可能控制数据的颗粒度 配置好邮件可以使用邮件报警,对于不正常的数据进行检测报警 本文由博客一文多发平台 OpenWrite 发布!
配置中心相信大家都有听过,zookeeper、apollo等等都是配置中心的代表,但大部分都是JAVA系为主的,笔者主要开发语言使用的是Golang当然也有类似于ETCD这样的组件,但是并不方便管理也无法可视化,在无意之间发现了阿里爸爸开源了nacos这个服务发现+配置中心组件,也经过了一段时间的时候在这里分享给大家 附上: 喵了个咪的博客:w-blog.cn Nacos官方Git地址:https://github.com/alibaba/nacos Nacos官方文档地址:https://nacos.io/zh-cn/docs/ Go语言SDK地址:https://github.com/sunmi-OS/gocore/tree/master/nacos PS:当前官方最新版本为 V1.1.3,阿里云有提供配置中心服务ACM使用方式和Nacos相同,使用阿里云的前提下免运维是个不错的选择 一、Nacos介绍 Nacos是阿里云中间件团队开源的一个项目,基于阿里云内部提供的ACM配置管理服务进行独立,截止到现在github已经有8K以上的star了,虽然成熟度还不能和携程开源的apollo相提并论,比较也是在阿里云上提供服务的组件稳定性还是值得相信的,当然要使用介绍Nacos必须要介绍介绍配置中心这样一个思想了。 配置中心是个老生常谈的话题,从有软件编程开始配置管理都是工程中重要的一步,当然对与一个单体应用只需要单个配置文件或环境变量的方式来管理配置就好了所以不再本文的讨论范围内,配置中心主要解决服务化或微服务化下的配置管理中的如下问题: 有效的密码管理,开发不碰触密码配置,运维人员和架构团队统一管理避免泄露; 多项目下的配置绝对统一性,不会出现配置写错导致的BUG 对于配置的编辑、存储、分发、变更管理、历史版本管理、变更审计有完善的能力 配置分组和灰度发布 有好处当然也有坏处,相对于使用配置文件我们还需要解决如下问题: 配置中心异常情况下服务怎么保障可用(SDK提供Cache功能当中心服务不可用会使用上一次加载的缓存配置) 配置变更后的程序生效逻辑(SDK提供配置变动订阅逻辑可以订阅配置变动编写处理逻辑) 开发过程中的配置文件调试(需要框架进行设计) 对于部分语言来说(PHP)配置中心性能的问题(Nacos的吞吐量8C16G 15K并发) 对比下来还是可以总结出配置中心利大于弊的结论 二、Nacos部署 Nacos不止支持二进制部署也支持支持Docker和K8S部署,因为Nacos是有状态服务存储的数据需要依赖于Mysql而且集群的方式需要指定slave的IP所以使用K8S并不是很好的选择(K8S使用StatefulSet来运行有状态服务),笔者这里用Docker-Composer的方式来运行Nacos Nacos官方Docker部署方式Git地址:https://github.com/nacos-group/nacos-docker git clone https://github.com/nacos-group/nacos-docker.git 单机部署(内存模式): docker-compose -f example/standalone-derby.yaml up 单机部署(Mysql模式): docker-compose -f example/standalone-mysql.yaml up 集群部署: docker-compose -f example/cluster-hostname.yaml up 访问:http://localhost:8848/nacos/ 就可以看到登录界面了 PS:默认用户名和密码都是 nacos 阿里云ACM服务 当然自己部署Nacos还会面临很多挑战,比如: 集群搭建 稳定性 Mysql数据库维护 配置安全保护(Nacos没有密码一说,但是ACM需要使用阿里云的密钥可以提高安全程度) PS:秉着能用服务就不自己搭建的原则笔者最终使用的是阿里云的ACM服务(当前ACM服务免费) PS:需要注意阿里云ACM和Nacos在SDK中的链接方式有不同 三、基础使用 Nacos有几个基础概念,我们只有先了解清楚之后才能更好的结合到业务场景: namespace 命名空间 Group 配置分组 DataID 具体的配置名称 一般我们使用namespace来区分不同的项目或环境,Group区分配置的差异系比如A业务获取的配置和B团队的有一些细微的差别可以通过Group来区分,最后使用DataId来区分具体的配置项 增加一个namespace 新增一个配置 支持很多种配置格式,也可以使用自定义的格式甚至直接存放代码都行 也有对应的JAVA系的示例代码 四、SDK和OpenApi使用配置 Nacos支持一下语言的SDK: Java go cpp python nodejs 大家可以在官方文档中查看具体的使用方式 上面已经配置好的配置我们可以使用OpenApi来访问它 curl "http://172.16.0.13:8848/nacos/v1/cs/configs?dataId=test_config&group=DEFAULT_GROUP&tenant=b58ea912-e564-4958-b21f-3098ad15daf9" { "name":"sunmi" } 特别注意tenant就是需要输入namespace的名称,但是不是原名是如下的名称 差不多基本的使用就到这里了,Nacos的开源版本还能姐姐服务发现相关的问题这些就留给大家探索了,在配置方面已经能够解决大部分问题了,下期笔者会基于Go语言给出配置中心最佳实践,大家记得关注我哦。
附上: 喵了个咪的博客:w-blog.cnKubernetes官方文档:https://kubernetes.io/docs/reference/Kubernetes官方Git地址:https://github.com/kubernetes/kubernetes PS:本系列中使用 KubernetesV1.8 RancherV1.6.14 一、国内安装Kubectl 官网提供的安装命令是: curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl 国内直接安装Kubectl会失败主要是访问了 google 的地址,但是可以通过Github上来找到可以进行使用编译好的二进制文件 访问如下网址:kubernetes/CHANGELOG.md at master · kubernetes/kubernetes · GitHub 找到你希望安装的Kubectl版本点击进入 找到Client Binaries 更具系统版本选择不同的安装包地址 执行安装命令 wget https://dl.k8s.io/v1.15.3/kubernetes-client-linux-amd64.tar.gz tar -zxvf kubernetes-client-linux-amd64.tar.gz cd kubernetes/client/bin chmod +x ./kubectl sudo mv ./kubectl /usr/local/bin/kubectl kubectl version 能够正常看到输出即可 二、配置文件 光有Kubectl命令想操作K8S集群还是不够的,必须要把链接K8S的相关配置信息填写进去,默认kubectl会在 ~/.kube/config 寻找配置文件 vim ~/.kube/config apiVersion: v1 clusters: - cluster: server: https://xxxxxxxxxx:443 insecure-skip-tls-verify: true name: kubernetes contexts: - context: cluster: kubernetes user: "kubernetes-admin" name: kubernetes-admin-xxxxxx current-context: kubernetes-admin-xxxxxxxx kind: Config preferences: {} users: - name: "kubernetes-admin" user: xxxxxxxx 就可以通过命令行执行对K8S集群的控制了 kubectl version Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.5", GitCommit:"32ac1c9073b132b8ba18aa830f46b77dcceb0723", GitTreeState:"clean", BuildDate:"2018-06-21T11:46:00Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"darwin/amd64"} Server Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.5", GitCommit:"753b2dbc622f5cc417845f0ff8a77f539a4213ea", GitTreeState:"clean", BuildDate:"2018-11-26T14:31:35Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"} 当然也可以指定对应的文件路径作为配置文件 kubectl --kubeconfig=~/.kubu/config xxxxxxxxxx 三、Kubectl 常用命令 kubectl apply – 通过文件名或控制台输入,对资源进行配置。 kubectl create – 通过文件名或控制台输入,创建资源。 kubectl delete – 通过文件名、控制台输入、资源名或者label selector删除资源。 kubectl edit – 编辑服务端的资源。 kubectl exec – 在容器内部执行命令。 kubectl get – 输出一个/多个资源。 kubectl logs – 输出pod中一个容器的日志。 kubectl namespace -(已停用)设置或查看当前使用的namespace。 kubectl port-forward – 将本地端口转发到Pod。 kubectl rolling-update – 对指定的replication controller执行滚动升级。 kubectl stop – (已停用)通过资源名或控制台输入安全删除资源。 kubectl version – 输出服务端和客户端的版本信息。 Basic Commands (Beginner): create Create a resource from a file or from stdin. expose 使用 replication controller, service, deployment 或者 pod 并暴露它作为一个 新的 Kubernetes Service run 在集群中运行一个指定的镜像 set 为 objects 设置一个指定的特征 run-container 在集群中运行一个指定的镜像. This command is deprecated, use "run" instead Basic Commands (Intermediate): get 显示一个或更多 resources explain 查看资源的文档 edit 在服务器上编辑一个资源 delete Delete resources by filenames, stdin, resources and names, or by resources and label selector Deploy Commands: rollout Manage the rollout of a resource rolling-update 完成指定的 ReplicationController 的滚动升级 scale 为 Deployment, ReplicaSet, Replication Controller 或者 Job 设置一个新的副本数量 autoscale 自动调整一个 Deployment, ReplicaSet, 或者 ReplicationController 的副本数量 Cluster Management Commands: certificate 修改 certificate 资源. cluster-info 显示集群信息 top Display Resource (CPU/Memory/Storage) usage. cordon 标记 node 为 unschedulable uncordon 标记 node 为 schedulable drain Drain node in preparation for maintenance taint 更新一个或者多个 node 上的 taints Troubleshooting and Debugging Commands: describe 显示一个指定 resource 或者 group 的 resources 详情 logs 输出容器在 pod 中的日志 attach Attach 到一个运行中的 container exec 在一个 container 中执行一个命令 port-forward Forward one or more local ports to a pod proxy 运行一个 proxy 到 Kubernetes API server cp 复制 files 和 directories 到 containers 和从容器中复制 files 和 directories. auth Inspect authorization Advanced Commands: apply 通过文件名或标准输入流(stdin)对资源进行配置 patch 使用 strategic merge patch 更新一个资源的 field(s) replace 通过 filename 或者 stdin替换一个资源 convert 在不同的 API versions 转换配置文件 Settings Commands: label 更新在这个资源上的 labels annotate 更新一个资源的注解 completion Output shell completion code for the specified shell (bash or zsh) Other Commands: api-versions Print the supported API versions on the server, in the form of "group/version" config 修改 kubeconfig 文件 help Help about any command plugin Runs a command-line plugin version 输出 client 和 server 的版本信息
为什么kong这么火热呢?当然是它拥有强大的插件群来解决我们本来需要重复手动配置或者需要自己实现的内容,kong在1.X版本加强了对于插件的支持,官方提供的插件就是几十个,通过插件可以带来各种场景更加方便使用 比较使用的功能: Oauth2.0 Hmac Auth IP限制 CORS 跨域配置 限速 请求大小限制 Prometheus监控 Http日志 附上: 喵了个咪的博客:http://w-blog.cn kong官网:https://konghq.com/ konga官网:https://github.com/pantsel/konga PS:Kong版本必须 >= 1.0.0才能正常使用konga 一,授权验证 在接口请求中权限验证是一个恒久不变的话题,Kong自带了6中加密方式,最常用的用户密码登录,Oauth2.0,Hmac都在其中, 我们先创建一个basic Auth,直接确认即可: 此时请求会有如下返回: 虽然开启了验证,但是还没有录入用户名密码,kong里面有一个Consumer的概念,需要增加一个Consumer 只有输入正确才能 但是这样的方式在网页上用的比较多一些,接口一般使用key验证,我们先先出basic插件 增加key—auth配置 默认请求会提示No Api key 我们只需要加入刚刚配置的参数名和值才可以正常请求 二,插件部分生效 通过上述UI配置的插件的生效范围都是全局生效的,当然一般我们一个网关可能代理了N个service的入口,如果插件的生效范围只是全局基本上就限制了使用范围,当然kong的设计者考虑的比较周到,是否全局都可,但是此时的konga并没有支持部分生效的UI配置,所以我们只能通过使用官方管理API的方式来创建只对于莫个service生效的插件,首先我们需要获取service的ID,通过kong的API文档 Admin API - v1.0.x | Kong - Open-Source API Management and Microservice Management 在创建插件的时候加入对应的service.id即可 konga虽然无法创建但是可以查看 这个service对应的请求就一定要加密 另外一个可以不用就可以正常调用 三、证书 填写证书下面填写具体的域名就配置好了这个证书了 四、上游服务器负载,健康检查 一般从运营的角度上来说一个服务会有多个上游服务器,一般我们会采用一些开源的组件来去配置LSV和nginx都可以做到,kong是基于nginx当然也能做到,负载均衡和健康检查 先清理所有的service和路由,并且需要准备两台服务器 curl 192.168.1.30 uat1 curl 192.168.1.31 uat2 默认端口是8000 再去创建service 最后创建路由 下面就实现了负载均衡的目的 curl 192.168.3.123:8000 uat1 curl 192.168.3.123:8000 uat1 curl 192.168.3.123:8000 uat2 curl 192.168.3.123:8000 uat2 curl 192.168.3.123:8000 uat1 五、配置备份管理机制 kong也有它的缺陷,因为默认是API的配置方式,所以备份很困难,konga刚好提供了一套kong备份机制
2020年08月