HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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

评论

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

京东云正式加入openGauss社区,共筑数据库科技服务供应链

daydayup

拜托,别在agent中依赖fastjson了

夏奇

Java Agent 类加载 架构设计 Fastjson

2023年7月文章一览

codists

编程人生

Ansible自动化部署安装openGauss 3.1.0 企业版

daydayup

openGauss企业级开源数据库荣获2022年度中国计算机学会(CCF)科技进步奖特等奖

daydayup

开放原子开源基金会TOC(技术监督委员会)第七十七次全体会议

开放原子开源基金会

Sprint Boot学习路线3

小万哥

Java spring 后端 springboot SpringCloud

PoseiSwap:首个基于模块化设施构建的订单簿 DEX

BlockChain先知

2023模式识别课程师资培训会重磅招募

飞桨PaddlePaddle

人工智能 百度 paddle 飞桨 百度飞桨

大模型真的会“好事多模”吗?

脑极体

大模型

文心一言 VS 讯飞星火 VS chatgpt (69)-- 算法导论6.5 8题

福大大架构师每日一题

福大大架构师每日一题

git remote 命令详解

百度搜索:蓝易云

git 云计算 Linux 运维 Remote

openGauss的高效数据压缩算法

daydayup

Python超实用!批量重命名文件/文件夹,只需1行代码

程序员晚枫

Python 文件管理 自动化办公

linux nfs共享存储服务详细解释。

百度搜索:蓝易云

云计算 Linux 运维 云服务器 NFS

openGauss 3.1.0 版本gs_stack功能解密

daydayup

覆巢之下(1)

于哲

深入浅出DAX:数据分析

TiAmo

数据分析 数据处理 DAX

openGauss-graph 0.1.0版本正式发布

daydayup

PoseiSwap:首个基于模块化设施构建的订单簿 DEX

西柚子

微信朋友圈的高性能复杂度架构

艾瑾行

#架构训练营

千云探探监测到7月25日法国巴黎Facebook网络恢复正常

郑州埃文科技

网络性能

DBMind索引推荐功能在民生银行的生产实践

daydayup

敏捷产品路线图管理实例,产品路线图工具

顿顿顿

Scrum 敏捷开发管理 产品路线图工具

Centos7安装配置Hive教程。

百度搜索:蓝易云

云计算 hive Linux centos 运维

PoseiSwap:首个基于模块化设施构建的订单簿 DEX

股市老人

端口转发工具Rinetd详细入门教程

百度搜索:蓝易云

云计算 Linux 运维 端口 Rinetd

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