阿里云飞天发布时刻,领先大模型限免,超7000万 tokens免费体验 了解详情
写点什么

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

评论

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

Android:这是一份全面&详细的-热修复-学习指南(1),统统给你解决

android 程序员 移动开发

ARouter源码详解,androidjni开发流程

android 程序员 移动开发

ASM插桩--多线程运行监测,2021Android大厂面试经验分享

android 程序员 移动开发

Code Review&编程习惯,安卓工程师面试题

android 程序员 移动开发

Android:这是一份全面&详细的-热修复-学习指南,含泪狂刷Android基础面试118题

android 程序员 移动开发

BATJ面霸:程序员可是要改变世界呀!阿里巴巴3面(1),flutter下载文件

android 程序员 移动开发

cmake使用教程(一)-起步,移动应用开发就业

android 程序员 移动开发

云小课|大数据时代的隐私利器-GaussDB(DWS)数据脱敏

华为云开发者联盟

EI智能体 DWS数据脱敏 数据仓库服务GaussDB(DWS)

ARouter系列2:源码分析,移动端跨平台开发

android 程序员 移动开发

BATJ面霸:程序员可是要改变世界呀!阿里巴巴3面,移动客户端开发岗面试题

android 程序员 移动开发

Android:知道类加载过程面试还是卡壳?干货总结,安卓运行内存监控

android 程序员 移动开发

BAT常见Android面试20题详解,小白看完都会了

android 程序员 移动开发

cmake使用教程(三)-安装(1),kotlin入门项目

android 程序员 移动开发

BottomSheetDialog 使用详解,设置圆角、固定高度,移动开发工程师

android 程序员 移动开发

cmake使用教程(九)-关于安卓的交叉编译,腾讯&字节&爱奇艺&网易&华为实习面试汇总

android 程序员 移动开发

王者荣耀商城异地多活架构设计

缘分呐

架构设计

Android高速下载器实现思路——单个任务的提速与优化,flutter二维码扫描

android 程序员 移动开发

英特尔与腾讯以全方位合作 开启云数智时代新征程

科技新消息

Canvas加动画,实现火柴人跳绳效果,2021Android开发面试解答

android 程序员 移动开发

AOP与OOP有什么区别,谈谈AOP的原理是什么,腾讯T2大牛亲自讲解

android 程序员 移动开发

SAP云平台运行环境Cloud Foundry和Neo的区别

汪子熙

云平台 SAP 11月日更

BindService的生命周期分析【我读源码你不读,我吃螃蟹你吃土

android 程序员 移动开发

CAS机制详解,android开发基础知识点

android 程序员 移动开发

cmake使用教程(三)-安装,程序员去大公司面试

android 程序员 移动开发

Context都没弄明白,还怎么做Android开发?,靠着这份面试题跟答案

android 程序员 移动开发

Android高工:细说 Android 多线程,探究原理知其所以然

android 程序员 移动开发

Android:2021大厂直通车面试宝典,为你的offer保驾护航

android 程序员 移动开发

Android:手把手教你实现在XML中配置网易云歌手详情滑动效果

android 程序员 移动开发

BindService的生命周期分析【我读源码你不读,我吃螃蟹你吃土(1)

android 程序员 移动开发

Python爬虫私活,代码公开!采集了20000+漫展历史数据,一言不合就开源

梦想橡皮擦

11月日更

Code Review&编程习惯(1),安卓网络通信开发

android 程序员 移动开发

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