为Kubernetes中任意应用添加基于oauth2的认证保护 (下)
本文是为Kubernetes中任意应用添加基于oauth2的认证保护的下篇,将图文详解如何使用基于钉钉认证的oauth2 proxy为自身本没有认证授权功能的Web站点实现认证及授权。
示例是使用的AWS EKS服务作为K8S环境。鉴于K8S的应用运行时属性,该示例也可以部署在其他云厂商托管的K8S。
示例模块简介
- Nginx Ingress Controller为K8S集群内Web应用提供反向代理,以及支持外部认证。
- 简单的Web站点,基于Nginx docker容器。该站点默认没有认证及授权功能,使用外部钉钉应用作为认证及授权。
- OAuth2 Proxy on Dingtalk提供基于钉钉应用的扫码认证及授权,只有认证且授权的用户才可以访问上面的Web站点。
默认设定
- Web站点域名
web.kane.mx
- 认证服务域名
oauth.kane.mx
准备AWS EKS环境
- 创建EKS集群。由于Nginx Ingress服务是LoadBalancer类型,EKS创建NLB或ELB对应的targets时需要targets部署在public VPC subnets,所以为了简化部署EKS集群的VPC subnets都选择public subnet。新建的EKS集群允许公开访问。
- 本地安装配置kubectl, aws-iam-authenticator用于远程管理集群。
- 为集群添加worker节点。
- 配置Helm部署环境。
钉钉应用准备
- 为企业或组织开通钉钉开发平台
- 创建一个新的移动应用。回调域名填写
<http or https>/<认证服务域名>/oauth2/callback
。记录下来应用的appId
和appSecret
。 - 创建一个企业内部工作台应用。地址可以随意设置。服务器出口IP设置为
EKS集群中工作节点的公网IP
或者NAT EIP
,取决于工作节点如何访问Internet。并记录下来应用appKey
和appSecret
。
部署示例应用
- 克隆示例部署脚本。
- 替换
values.yaml
中的dingtalk_corpid
为工作台应用的appKey
,dingtalk_corpsecret
为工作台应用的appSecret
。
由于社区维护的oauth2-proxy charts并不支持dingtalk扩展的SECRET ENV,所以将密钥配置到了
configmap
中。用于生产环境的话,建议按这个commit使用secret
保存应用secret。
oauth2-proxy: config: clientID: aaa clientSecret: bbb cookieSecret: ccc configFile: |+ email_domains = [ "*" ] cookie_domain = "kane.mx" cookie_secure = false dingtalk_corpid = "<appkey of dingtalk app>" dingtalk_corpsecret = "<appsecret of dingtalk app>"
如果仅希望企业部分部门的员工可以获得授权,在上面configFile
配置下添加如下配置,
dingtalk_departments = ["xx公司/产品技术中心","xx公司/部门2/子部门3"]
- 替换部署应用的域名为你的域名。
- 执行以下命令安装Helm部署依赖。
helm dep up
- 执行以下命令部署nginx ingress controller, web应用以及oauth2 proxy
helm upgrade --install -f values.yaml --set oauth2-proxy.config.clientID=<移动应用appid>,oauth2-proxy.config.clientSecret=<移动应用appsecret> site-with-auth --wait ./
如果集群中已经部署了Nginx Ingress Controller
,修改values.yaml
如下将忽略部署Nginx ingress,
affinity: {} nginx-ingress: enabled: false controller: ingressClass: nginx config:
- 部署成功后,获取
ELB
地址。
kubectl get svc -o jsonpath='{ $.status.loadBalancer.ingress[*].hostname }' <deployment name>-nginx-ingress-controller;echo a3afe672259c511e98e2a0a0d88fda3e-xx.elb.ap-southeast-1.amazonaws.com
部署成功后配置
将站点和oauth服务域名解析到上面部署创建的ELB上。
测试
访问Web站点(如本示例中的http://web.kane.mx
),未授权的情况下,调转到钉钉应用扫码登录界面。使用组织内成员的钉钉扫码授权后,将跳转回Web站点应用,可以正常浏览该域名下的页面。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
为Kubernetes中任意应用添加基于oauth2的认证保护 (上)
企业随着业务的发展,必然会部署各种各样的IT系统。出于安全性的考虑,一些系统仅可企业内部使用,甚至仅开放给企业部分部门员工使用。 这些IT系统大致可分为两类, 系统本身不支持任何认证机制,例如资讯或文档类系统。需要增加认证保护,能够限制非企业员工访问即可。系统运维通常的做法是,为站点设置HTTP Basic认证保护。由于HTTP Basic认证是通过预设的用户、密码认证,认证信息比较容易泄露。即使定期更换密码,但需要额外的机制通知用户密码的变更,用户体验也不好。 系统自身支持认证,甚至支持多种认证机制。比如最常用的开源CI/CD工具,Jenkins内置支持本地数据库认证、通过插件支持多种第三方系统集成认证。如果大量的IT系统都有一套独立的用户管理,随着企业的员工的变更,用户的增删等操作对系统管理员来说是不小的工作量。同时,也很容易由于人为疏忽,造成资产、数据的安全隐患。 假设企业自身已经有了一套OA系统包含员工、组织结构管理,例如,国内目前最为普及流行的钉钉或企业微信。我们完全可以提供一套基于oauth 2.0协议的认证方式,让以上两类IT系统使用企业已有的OA系统(钉钉或企业微信)来...
- 下一篇
阿里云应用性能管理(APM)产品-应用实时监控服务(ARMS)技术解密 资料下载
直播大纲 1. 应用性能管理(APM)背景介绍 2. 分布式链路追踪的现状与使用场景 3. ARMS分布式链路追踪的技术实现 4. 最佳实践 (1) 全息排查+场景链路(2) 前端监控与应用监控融合(3) ARMS与K8S的融合与实践 专家介绍 阳其凯(逸陵),阿里巴巴高级开发工程师,2016年加入阿里巴巴Eageleeye团队,多年实时计算平台与APM产品开发经验,目前主要负责云产品业务实时监控服务(ARMS)与链路追踪(Tracing Analysis)的研发工作。 直播时间 2019.04.10 20:00 直播回放 回放链接:https://yq.aliyun.com/live/973 PPT精彩预览: 下载地址:https://yq.aliyun.com/download/3495 欢迎进群
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Docker安装Oracle12C,快速搭建Oracle学习环境