为Kubernetes中任意应用添加基于oauth2的认证保护 (下)

简介: 本文是为Kubernetes中任意应用添加基于oauth2的认证保护的下篇,将图文详解如何使用基于钉钉认证的oauth2 proxy为自身本没有认证授权功能的Web站点实现认证及授权。 示例是使用的AWS EKS服务作为K8S环境。

本文是为Kubernetes中任意应用添加基于oauth2的认证保护的下篇,将图文详解如何使用基于钉钉认证oauth2 proxy为自身本没有认证授权功能的Web站点实现认证及授权。

示例是使用的AWS EKS服务作为K8S环境。鉴于K8S的应用运行时属性,该示例也可以部署在其他云厂商托管的K8S。

示例模块简介

默认设定

  • Web站点域名web.kane.mx
  • 认证服务域名oauth.kane.mx

准备AWS EKS环境

  1. 创建EKS集群。由于Nginx Ingress服务是LoadBalancer类型,EKS创建NLB或ELB对应的targets时需要targets部署在public VPC subnets,所以为了简化部署EKS集群的VPC subnets都选择public subnet。新建的EKS集群允许公开访问。
  2. 本地安装配置kubectl, aws-iam-authenticator用于远程管理集群。
  3. 为集群添加worker节点
  4. 配置Helm部署环境

钉钉应用准备

  1. 为企业或组织开通钉钉开发平台
  2. 创建一个新的移动应用。回调域名填写<http or https>/<认证服务域名>/oauth2/callback。记录下来应用的appIdappSecret
  3. 创建一个企业内部工作台应用。地址可以随意设置。服务器出口IP设置为EKS集群中工作节点的公网IP或者NAT EIP,取决于工作节点如何访问Internet。并记录下来应用appKeyappSecret

部署示例应用

  1. 克隆示例部署脚本。
  2. 替换values.yaml中的dingtalk_corpid为工作台应用的appKeydingtalk_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"]
  1. 替换部署应用的域名为你的域名。
  2. 执行以下命令安装Helm部署依赖。
helm dep up
  1. 执行以下命令部署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:
  1. 部署成功后,获取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站点应用,可以正常浏览该域名下的页面。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
目录
相关文章
|
18天前
|
Kubernetes 网络协议 网络安全
提升你的云技能:深入了解CKA认证之k8s升级秘籍!
提升你的云技能:深入了解CKA认证之k8s升级秘籍!
18 0
|
2月前
|
存储 运维 Kubernetes
批处理及有状态等应用类型在 K8S 上应该如何配置?
批处理及有状态等应用类型在 K8S 上应该如何配置?
|
2月前
|
Kubernetes 应用服务中间件 nginx
百度搜索:蓝易云【使用Kubernetes部署Nginx应用教程】
现在,你已经成功在Kubernetes集群上部署了Nginx应用。通过访问Service的外部IP地址,你可以访问Nginx服务。
41 4
|
3月前
|
Kubernetes 负载均衡 Linux
Kubernetes的应用
Kubernetes的应用
34 0
|
3月前
|
存储 Kubernetes 监控
Kubernetes快速进阶与实战:构建可靠的容器化应用平台
Kubernetes快速进阶与实战:构建可靠的容器化应用平台
92 0
|
6天前
|
Kubernetes 监控 Cloud Native
构建高效云原生应用:基于Kubernetes的微服务治理实践
【4月更文挑战第13天】 在当今数字化转型的浪潮中,企业纷纷将目光投向了云原生技术以支持其业务敏捷性和可扩展性。本文深入探讨了利用Kubernetes作为容器编排平台,实现微服务架构的有效治理,旨在为开发者和运维团队提供一套优化策略,以确保云原生应用的高性能和稳定性。通过分析微服务设计原则、Kubernetes的核心组件以及实际案例,本文揭示了在多变的业务需求下,如何确保系统的高可用性、弹性和安全性。
11 4
|
7天前
|
JSON Kubernetes Go
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
17 0
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
|
18天前
|
消息中间件 Kubernetes Kafka
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
14 0
|
29天前
|
边缘计算 Kubernetes 负载均衡
容器编排技术在云计算中的应用
随着云计算技术的飞速发展,容器编排技术作为一种重要的部署和管理工具,正在逐渐成为云计算领域的热门话题。本文将介绍容器编排技术在云计算中的应用,探讨其在提高应用程序部署效率、资源利用率以及系统可靠性方面的优势,并分析其未来发展趋势。
|
30天前
|
人工智能 自然语言处理 Kubernetes
LLM 技术图谱(LLM Tech Map)& Kubernetes (K8s) 与AIGC的结合应用
LLM 技术图谱(LLM Tech Map)& Kubernetes (K8s) 与AIGC的结合应用
60 0