写点什么

使用 Kube-OIDC-Proxy 跨多个 EKS 集群进行一致的 OIDC 身份验证(二)

  • 2019-12-26
  • 本文字数:4289 字

    阅读完需:约 14 分钟

使用 Kube-OIDC-Proxy 跨多个 EKS 集群进行一致的 OIDC 身份验证(二)

要部署清单,我们将使用 Jsonnet 生成将部署到每个集群中的清单。生成的这些清单通过更改集群相关选项的单个 config.jsonnet 文件进行配置。完成后,此文件应存储在 kube-oidc-proxy/demo 目录中。


下面的示例显示的是 config.jsonnet 文件完成时的样子。接下来的几个步骤将指导您创建文件。


local main = import './manifests/main.jsonnet';
function(cloud='amazon_cluster_1') main { cloud: cloud, clouds+: { amazon_cluster_1: { master: true, domain_part: '.cluster-1', config: import './manifests/amazon_cluster_1-config.json', }, amazon_cluster_2: { master: false, domain_part: '.cluster-2', config: import './manifests/amazon_cluster_2-config.json', }, amazon_cluster_3: { master: false, domain_part: '.cluster-3', config: import './manifests/amazon_cluster_3-config.json', }, google: null, amazon: null, digitalocean: null, }, base_domain: '.eks.aws.joshvanl.com', cert_manager+: { letsencrypt_contact_email:: 'xxxxxx@gmail.com', solvers+: [ { http01: { ingress: {}, }, }, ], }, dex+: if $.master then { connectors: [ $.dex.Connector('github', 'GitHub', 'github', { clientID: 'xxx', clientSecret: 'xxx', homePage: 'eks.aws.joshvanl.com', }), ], } else { },}
复制代码


首先,我们将引用我们创建的每个集群以及生成的密码,因为它们将用于构建身份验证基础设施。我们还需要表示单个主集群,以容纳 Dex 和登陆 Web 服务器部署,以服务基础设施中的所有其他集群。


function(cloud='amazon_cluster_1') main {  cloud: cloud,  clouds+: {    amazon_cluster_1: {      master: true,      domain_part: '.cluster-1',      config: import './manifests/amazon_cluster_1-config.json',    },    amazon_cluster_2: {      master: false,      domain_part: '.cluster-2',      config: import './manifests/amazon_cluster_2-config.json',    },    amazon_cluster_3: {      master: false,      domain_part: '.cluster-3',      config: import './manifests/amazon_cluster_3-config.json',    },    google: null,    amazon: null,    digitalocean: null,  },
复制代码


接下来,表示您拥有的基本域的域名,它将用于连接各个集群。基本域还将用于 URL,稍后,您可将它用于连接登陆页面。


将“.eks.aws.joshvanl.com”替换为您自己的基本域。


base_domain: '.eks.aws.joshvanl.com',
复制代码


配置 cert-manager,以设置账户电子邮件地址以及我们在请求证书时希望解决的问题。我们将在这里使用 HTTP01 解决问题。


将“xxxxxx@gmail.com”替换为您自己的联系电子邮件地址。


cert_manager+: {    letsencrypt_contact_email:: 'xxxxxx@gmail.com',    solvers+: [      {        http01: {          ingress: {},        },      },    ],  },
复制代码


最后,设置您希望用于 Dex 的连接器。


dex+: if $.master then {    connectors: [      $.dex.Connector('github', 'GitHub', 'github', {        clientID: 'xxx',        clientSecret: 'xxx',        homePage: 'eks.aws.joshvanl.com',      }),    ],  } else {  },
复制代码


这些连接器用于完成 OAuth 流,从而对新用户身份进行验证。完成 OAuth 流时,Dex 将签署包含该颁发机构接收和验证的身份的 OIDC 令牌。在本例中,我们将使用 GitHub 应用程序。OAuth 流将根据用户的 GitHub 配置文件通过其 GitHub 账户和其身份进行解决。您可以在构建 OAuth 应用程序中了解有关如何创建 GitHub OAuth 应用程序的更多信息。


使用创建的集群和编写的配置,我们可以开始安装组件。


将清单部署到主集群中:


$ CLOUD=amazon_cluster_1 make manifests_apply
复制代码


此操作应该将所有组件安装到适当配置的集群中。为了解决 HTTP01 问题并使集群可以通过您选择的基本域从 Internet 进行路由,请等待 ExternalIP 公开 LoadBalancer 类型的服务。


$ export KUBECONFIG=.kubeconfig-amazon_cluster_1$ kubectl get services --namespace auth$ kc get svc -n authNAME                        TYPE           CLUSTER-IP       EXTERNAL-IP                                                               PORT(S)                      AGEcontour                     LoadBalancer   172.20.221.86    a21a97cf9d40e11e9b58302e1256987f-1040136959.eu-west-1.elb.amazonaws.com   443:31844/TCP,80:32636/TCP   105sdex                         ClusterIP      172.20.147.161   <none>                                                                    5556/TCP                     104sgangway                     ClusterIP      172.20.69.133    <none>                                                                    8080/TCP                     80skube-oidc-proxy             ClusterIP      172.20.60.178    <none>                                                                    443/TCP                      79slandingpage                 ClusterIP      172.20.90.110    <none>                                                                    80/TCP                       79s
复制代码


生成这些项目后,创建三个指向登陆页面 URL 的 CNAME 记录,Dex 服务器和一个指向该集群内的组件的通配符记录。您可以发现为此集群生成的入口记录如下所示:


$ kubectl get ingressroutes --namespace authNAME              FQDN                                             TLS SECRET   FIRST ROUTE   STATUS   STATUS DESCRIPTIONdex               dex.eks.aws.joshvanl.com                                      /             valid    valid IngressRoutegangway           gangway.cluster-1.eks.aws.joshvanl.com                        /             valid    valid IngressRoutekube-oidc-proxy   kube-oidc-proxy.cluster-1.eks.aws.joshvanl.com                /             valid    valid IngressRoute
$ kubectl get ingress --namespace authlandingpage gangway.cluster-1.eks.aws.joshvanl.com,kube-oidc-proxy.cluster-1.eks.aws.joshvanl.com,dex.eks.aws.joshvanl.com + 1 more... 80, 443 14s
复制代码


这需要三个如下所示的 CNAME 记录:


.cluster-1.eks.aws  CNAME 1h a21a97cf9d40e11e9b58302e1256987f-1040136959.eu-west-1.elb.amazonaws.com.dex.eks.aws          CNAME 1h a21a97cf9d40e11e9b58302e1256987f-1040136959.eu-west-1.elb.amazonaws.com.eks.aws              CNAME 1h a21a97cf9d40e11e9b58302e1256987f-1040136959.eu-west-1.elb.amazonaws.com.
复制代码


当 DNS 记录传播到 Internet 之后,证书 HTTP01 挑战应成功,且证书应签发。您可以通过检查证书资源状态和 cert-manager 控制器中的日志输出来查看签发证书的状态:


$ kubectl get certificates --namespace authNAME              READY   SECRET                AGEdex               True    dex-tls               13sgangway           True    gangway-tls           13skube-oidc-proxy   True    kube-oidc-proxy-tls   12slandingpage       True    landingpage-tls       12s
$ kubectl logs --namespace cert-manager cert-manager-xxx
复制代码


注意:如果您收到证书错误,请回收 Kube-OIDC-Proxy、Dex 和 Gangway pod。


当证书签发后,您应该能够访问 Kube-OIDC-Proxy Demo 登陆页面:



由于我们只部署了一个集群,只有第一个集群才能访问实时 Gangway。通过点击 GANGWAY AMAZON_CLUSTER_1 的按钮,我们可以通过对 GitHub 进行身份验证来请求第一个集群的 OIDC 令牌。





当您下载 kubeconfig 后,您应该能够使用 Kube-OIDC-Proxy 通过我们的 OIDC 令牌连接到此集群。


$ kubectl --kubeconfig ~/Downloads/kubeconfig get nodes服务器错误(禁止):节点被禁止:用户“xxxxxx@gmail.com”无法在集群范围内在 API 组 "" 中列出资源“节点”
复制代码


由于我们尚未应用此用户的任何 RBAC 权限,此命令失败。然而,它确实表明我们正在以 GitHub 的身份连接。现在,我们可以分配此用户 cluster-admin 权限,但您很可能希望为您自己的集群的租户创建更严格、更精细化的权限。


xxxxxx@gmail.com 替换为有效的 GitHub ID。


$ kubectl create clusterrolebinding xxxxxx@gmail.com --clusterrole cluster-admin --user xxxxxx@gmail.comclusterrolebinding.rbac.authorization.k8s.io/xxxxxx@gmail.com created$ kubectl --kubeconfig ~/Downloads/kubeconfig get nodesNAME                                       STATUS   ROLES    AGE     VERSIONip-10-0-2-136.eu-west-1.compute.internal   Ready    <none>   32m   v1.14.6-eks-5047edip-10-0-3-178.eu-west-1.compute.internal   Ready    <none>   32m   v1.14.6-eks-5047edip-10-0-3-50.eu-west-1.compute.internal    Ready    <none>   32m   v1.14.6-eks-5047ed
复制代码


现在,第一个集群已配置完成,我们准备为接下来的两个集群重复此过程。请记住创建指向新集群终端节点的新 CNAME 记录,以便它们可以通过 Internet 进行路由,并且能够解决 HTTP01 问题。


$ CLOUD=amazon_cluster_2 make manifests_apply$ CLOUD=amazon_cluster_3 make manifests_apply
复制代码


由于位于主集群中的项目将在所有集群中共享,那些非主集群都将不会部署 Dex 或登陆页面。


完成后,所有三个集群都将准备好请求令牌,并且可以使用 OIDC 进行访问。

总结

使用 Kube-OIDC-Proxy 可使具有多集群、多租户 Kubernetes 基础设施的组织促进基于第三方身份提供商的一致性 OIDC 身份验证。在此博文中,我演示了如何将其他开源项目与 Kube-OIDC-Proxy 结合使用为集群的最终用户创建简化的登录体验。


该项目的未来开发将涉及创建更多选项来处理带有和不带有令牌的代理请求,以及实施审计。您可以在此了解该项目并关注 GitHub 的进度。


本博文中的内容和意见属于第三方作者,AWS 不对本博文的内容或准确性负责。


本文转载自 AWS 技术博客。


原文链接:https://amazonaws-china.com/cn/blogs/china/consistent-oidc-authentication-across-multiple-eks-clusters-using-kube-oidc-proxy/


2019-12-26 13:481180

评论

发布
暂无评论
发现更多内容

碳实践|如何快速掌握组织碳核算中范围3的计算方法

AMT企源

数字化转型 双碳 碳管理 碳核算

Flink⼤状态作业调优实践指南:Flink SQL 作业篇

Apache Flink

大数据 flink flink sql

抖音面试:说说延迟任务的调度算法?

王磊

京东商品评论数据接口(JD.item_review)丨京东平台实时API接口指南

tbapi

京东API接口 京东商品评论接口 京东商品评论采集

复盘自研产品,总结技术实践

小院里的霍大侠

淘宝/天猫商品详情API接口与数据挖掘技术的结合应用

技术冰糖葫芦

API 接口 API 文档 API 策略

速卖通商品详情API(aliexpress.item_get)返回值详解与实战

技术冰糖葫芦

API 接口 API 文档 API 策略

堡垒机审计日志的定义以及作用概述

行云管家

数字化 堡垒机 IT信息

接口测试 Mock 工具使用 - 弱网测试

测吧(北京)科技有限公司

测试

数据库市场或迎变局 天翼云TeleDB打造企业数据管理最优解

极客天地

政界人士敦促拜登从尼日利亚带回币安高管

web3区块链创业团队DappNetWork

LPS完成战略性收购 增强数据实践和营销云能力

财见

CoT思维链 , 大模型“智能涌现”的关键

澳鹏Appen

大模型 模型推理 AGI 智能涌现 思维链

揭秘业务系统数据安全三大核心问题:“谁在用”、“用什么”和“怎么用”

极盾科技

数据安全

优化mac储存空间的方法 解决苹果电脑不流畅卡顿

阿拉灯神丁

Mac 软件 存储空间 CleanMyMac X 激活码生成器 苹果软件

未来5年,只有这种产品团队才能开启上帝视角【玩转IPD】

IPD产品研发管理

产品 项目管理 产品开发 软件研发

新规:互联网政务应用安全管理规定将于7月1日正式执行

行云管家

互联网 政务

如何清理mac磁盘?快速清理小妙招在这里

阿拉灯神丁

软件 Mac 软件 电脑 CleanMyMac X

心诺安 x TapData:快速搭建云中数仓,助力电商企业实施“以用户为中心的”精细化运营

tapdata

数据库

基于阿里云服务网格流量泳道的全链路流量管理(三):无侵入式的宽松模式泳道

阿里巴巴云原生

阿里云 云原生 服务网格

如何把域名解析到自己的网站?怎么设置域名解析?

国科云

使用 Kube-OIDC-Proxy 跨多个 EKS 集群进行一致的 OIDC 身份验证(二)_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章