AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

使用 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:481003

评论

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

柳州等保测评机构有哪些?在哪里?

行云管家

等保 等保测评 柳州

写在万粉千文的黎明前

FunTester

JetBrains GoLand v2023.3.2中文密钥版 及详细安装教程

Rose

祝贺!亚马逊云科技与伊克罗德信息签署为期4年市场拓展战略合作计划

伊克罗德信息科技

文献解读-遗传病-第二十六期|《癫痫的临床特征、诊疗和KCNH5突变》

INSVAST

基因测序 基因数据分析 遗传病 文献解读

第七在线联手深服协:以科技之力,绘就时尚 AI 智能商品管理新篇章

第七在线

如何确保 API 接口的稳定性和可靠性

Noah

【YashanDB知识库】ycm托管数据库时报错OM host ip:127.0.0.1 is not support join to YCM

YashanDB

yashandb 崖山数据库 崖山DB

云MES:数字化转型的引擎,企业上云的强力推手

万界星空科技

企业上云 mes 5G 企业上云 云mes 万界星空科技

高并发系统的艺术:如何在流量洪峰中游刃有余

京东科技开发者

记一次JSF异步调用引起的接口可用率降低

京东科技开发者

轻松搞定工作汇报ppt!这3款AI软件值得拥有

彭宏豪95

效率工具 职场 办公软件 AIGC AI生成PPT

​ 精选一款/开源MES生产制造执行系统

万界星空科技

mes #开源 开源mes 万界星空科技 mes源码

基于人工智能的代码分析与 Bug 检测实战

测试人

软件测试

【行云流水线】满足你对工作流编排的一切幻想~skr

京东科技开发者

系统整容纪:用知识来"武装"自己~认识MySQL的锁与事务

京东科技开发者

免费领取云主机,在华为开发者空间玩转YOLOV3

华为云开发者联盟

人工智能 云主机 目标检测 YoloV3 企业号 8 月 PK 榜

高并发系统的艺术:如何在流量洪峰中游刃有余

京东科技开发者

万界星空科技MES中的仓库管理功能

万界星空科技

mes 云mes 万界星空科技 出入库管理 仓库管理

用 AI 解锁技术调研的新姿势

京东科技开发者

JeecgBoot 如何集成 Spring AI

JEECG低代码

[Mac/win永久激活版] Studio One 6中文版下载 Studio One 6许可证分享

Rose

SD-WAN组网技术的九大应用场景

Ogcloud

SD-WAN 企业组网 SD-WAN组网 SD-WAN服务商 SDWAN

华为云全域Serverless技术创新:全球首创通用Serverless平台被ACM SIGCOMM录用

华为云PaaS服务小智

云计算 Serverless 华为云

360联合国内15个最强大模型推出“AI助手”碾压GPT4o!全球首部《人工智能法案》正式生效!|AI日报

可信AI进展

人工智能

JetBrains IntelliJ IDEA 2020 中文无限试用版 Mac版 IDEA 2020下载安装

Rose

堡垒机应用发布功能是什么意思?有什么用?

行云管家

堡垒机 应用发布 堡垒机软件

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