🧑‍🏫
liualexiang
  • Introduction
  • Azure
    • AKS Basic
    • AKS Spark
    • AZ ACR SYNC
    • Azure CMI SDWAN
    • Azure LB DeepDive
      • Azure LB DeepDive
    • Azure Service Principal Basic
    • Azure Internal VM Network Connectivity
      • Azure Internal VM Network Connectivity
    • Azure Cli Build
    • Azure Vm Memory Monitor
  • Blockchain
    • BTC
  • CRISPR
    • 使用Parallel_Cluster提升CRISPA效率
  • OpenSource
    • ElasticSearch
      • ES Get Started
      • ES Search Query
      • Kibana 可视化
      • Logstash配置
    • Ansible 基础
    • Infra As Code
      • Pulumi Get Started
      • Terraform Basic
    • ZooKeeper 基础
    • RPC与REST
    • 使用Python申请大量内存测试
    • 使用TPC_DS产生压测数据
    • Superset
      • Superset部署手册
    • 代码扫描
    • Git
      • Git Basic
      • Github Action Basic
      • Gitlab与AzureAD集成
      • Gitbook 基础教程
    • K8S
      • enter_node
      • K8s X509 Client Cert
      • K8s Basic
      • K8s Oidc
      • Docker 基础
      • helm基础
      • K8S_Secrets管理
      • 深入了解K8S
      • 混沌工程
      • Istio
      • 生态
      • CRD开发
      • k8s网络
    • Cloud_Custodian
    • Jenkins Basic
    • Nginx
    • ETCD
    • 正则
    • VictoriaMetrics
    • Kafka
  • MySQL
    • MySQL 调优
  • Linux
    • SSH Tunnel 上网
    • 内存管理
    • 在Linux系统中通过LUKS加密磁盘
    • 量子计算 Basic
    • IO多路复用
    • Iptables
    • tmux和screen
    • Systemd
    • OS 基础
    • jq基础
    • yum
    • neovim
  • Web
    • Html Css
    • Web部署
    • 缓存
  • Programming
    • 算法
      • 返回list中最大生序子序列长度
    • Python技巧
      • Python的语法糖
      • Python常用装饰器
      • AsyncIO基础
      • 自动化测试pytest
      • python中的下划线
      • 面向对象
      • Python的坑
      • Python配置文件管理
      • HTTP Stream Response
      • Python项目管理
    • 设计模式
      • 设计模式
      • 面向对象的思想
      • 编程概念
    • Go
      • Go 基础
      • Go常用功能
      • 结构体入门
    • 前端
    • Vue
    • NodeJS
  • Math
    • 多项式插值法
  • Security
    • HTTP常见攻击
    • 加密与签名
    • RSA
    • ECDSA
  • Solidity
    • Solidity基础
    • Blockchain Testnet Faucet
  • Tools
    • 视频处理ffmpeg
    • IDE配置
    • iTerm2美化
    • 密码管理
    • FRP配置
    • 工具集
由 GitBook 提供支持
在本页
  • 背景
  • 创建OIDC
  • 修改master node的kube-api
  • 使用kubectl进行认证的时候,我们需要用 k8s-oidc-helper 来产生一个token,并将其存放在 ~/.kube/config 文件中
  • 创建clusterrole和rolebinding(测试k8s 1.19)
  • 验证
  1. OpenSource
  2. K8S

K8s Oidc

背景

本次使用kubeadm自建2个节点的k8s集群,以及通过google提供的OIDC身份提供商做验证

创建OIDC

访问下面的网站,创建一个OIDC IDP,将app type选择为Desktop App,记录下Client ID和 Secret ID https://console.cloud.google.com/apis/credentials

修改master node的kube-api

通过下面的命令进行修改master节点的kube-apiserver的配置,只用修改master节点即可,worker node无需修改

sed -i "/- kube-apiserver/a\    - --oidc-issuer-url=https://accounts.google.com\n    - --oidc-username-claim=email\n    - --oidc-client-id=[YOUR_GOOGLE_CLIENT_ID]" /etc/kubernetes/manifests/kube-apiserver.yaml

修改的本质是:将 /etc/kubernetes/manifests/kube-apiserver.yaml的 .spec.containers.command中,添加三行

    - kube-apiserver
    - --oidc-issuer-url=https://accounts.google.com
    - --oidc-username-claim=email
    - --oidc-client-id=[THIS_IS_CLIENT_ID]

使用kubectl进行认证的时候,我们需要用 k8s-oidc-helper 来产生一个token,并将其存放在 ~/.kube/config 文件中

执行下面的命令下载k8s-oidc-helper,并产生kubeconfig文件

go get github.com/micahhausler/k8s-oidc-helper
cd go/bin/
./k8s-oidc-helper — client-id <lient-Id> — client-secret <secret>

将上述返回的信息的users部分的字段,追加到当前的kubeconfig文件中

users:
- name: ***************@gmail.com
 user:
 auth-provider:
 config:
 client-id: ***************
 client-secret: ****************************
 id-token: ***************************
 idp-issuer-url: https://accounts.google.com
 refresh-token: ****************************
 name: oidc

创建clusterrole和rolebinding(测试k8s 1.19)

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: admin-role
rules:
- apiGroups: ["*"]
  resources: ["*"]
  verbs: ["*"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: admin-binding
subjects:
- kind: User
  name: user@gmail.com
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: admin-role
  apiGroup: rbac.authorization.k8s.io

验证

接下来验证下是否能访问成功吧

kubectl --user=xxxxx@gmail.com get nodes
kubectl --token=[THIS_IS_JWT_TOKEN] get nodes
上一页K8s Basic下一页Docker 基础

最后更新于6个月前