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

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: 本文是为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站点应用,可以正常浏览该域名下的页面。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
25天前
|
存储 Kubernetes 持续交付
介绍一下Kubernetes的应用场景
【10月更文挑战第18天】介绍一下Kubernetes的应用场景。
113 3
|
5天前
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?
|
5天前
|
监控 持续交付 Docker
Docker容器化部署在微服务架构中的应用
Docker容器化部署在微服务架构中的应用
|
14天前
|
JavaScript 持续交付 Docker
解锁新技能:Docker容器化部署在微服务架构中的应用
【10月更文挑战第29天】在数字化转型中,微服务架构因灵活性和可扩展性成为企业首选。Docker容器化技术为微服务的部署和管理带来革命性变化。本文探讨Docker在微服务架构中的应用,包括隔离性、可移植性、扩展性、版本控制等方面,并提供代码示例。
52 1
|
22天前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
|
1月前
|
Prometheus Kubernetes 监控
k8s学习--kubernetes服务自动伸缩之水平伸缩(pod副本伸缩)HPA详细解释与案例应用
k8s学习--kubernetes服务自动伸缩之水平伸缩(pod副本伸缩)HPA详细解释与案例应用
k8s学习--kubernetes服务自动伸缩之水平伸缩(pod副本伸缩)HPA详细解释与案例应用
|
1月前
|
应用服务中间件 调度 nginx
Kubernetes的Pod调度:让你的应用像乘坐头等舱!
Kubernetes的Pod调度:让你的应用像乘坐头等舱!
|
1月前
|
存储 Kubernetes 负载均衡
基于Ubuntu-22.04安装K8s-v1.28.2实验(四)使用域名访问网站应用
基于Ubuntu-22.04安装K8s-v1.28.2实验(四)使用域名访问网站应用
28 1
|
1月前
|
Kubernetes 负载均衡 应用服务中间件
k8s学习--ingress详细解释与应用(nginx ingress controller))
k8s学习--ingress详细解释与应用(nginx ingress controller))
167 0
|
1月前
|
缓存 Kubernetes 负载均衡
k8s学习--sessionAffinity会话保持(又称会话粘滞)详细解释与应用
k8s学习--sessionAffinity会话保持(又称会话粘滞)详细解释与应用
149 0