Cloud Native应用交付

  • 首页
  • 关于本站
  • 个人介绍
  • Downloads
  • Repo
    • Github
    • Container
  • F5
    • F5 Python SDK
    • F5-container
    • F5-LBaaS
  • 社交
    • 联系我
    • 微信/微博
    • 公众号
    • 打赏赞助
行至水穷处 坐看云起时
Cloud Native Application Services: cnadn.net
  1. 首页
  2. 容器/k8s
  3. 正文

Service Account Token Volume Projection

2020年09月16日 3864点热度 0人点赞 0条评论

用于自动化的为一个容器申请jwt token,并关联到此容器上,可以代表该容器身份。kubelet负责申请,挂载,以及更新该token。

 

要实现该功能需要:

k8s 版本v1.12以上

kube-apiserver 中启用如下flag,具体key文件位置,以及audiences要根据实际情况配置

1
2
3
4
--service-account-issuer=kubernetes.default.svc \
--api-audiences=api,istio-ca \
--service-account-key-file=/srv/kubernetes/server.key \
--service-account-signing-key-file=/srv/kubernetes/server.key

pod里的容器spec定义需要包含如下volumemount以及volumes定义,注意volumes定义使用的是serviceAccountToken (projectedVolume类型)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    volumeMounts:
    - mountPath: /var/run/secrets/tokens
      name: istio-token
 
 
  volumes:
  - name: istio-token
    projected:
      defaultMode: 420
      sources:
      - serviceAccountToken:
          audience: istio-ca
          expirationSeconds: 43200
          path: istio-token

这样当此pod启动,kubelet利用相应的信息申请并注入jwt到容器里(上面例子中挂到/var/run/secrets/tokens目录下)

可以查看对应容器中的token文件:

1
2
[root@am-primary aspenmesh-1.6.5-am1]# kubectl exec -it aspen-mesh-metrics-collector-6cfd7bbc7c-tkrbp -c istio-proxy -n istio-system -- cat /var/run/secrets/tokens/istio-token
eyJhbGciOiJSUzI1NiIsImtpZCI6Iks3eG5DSFF3M0tqN2hRMFAySmVYblQtd1haUExJTlBGMkpDM1doQmZBencifQ.eyJhdWQiOlsiaXN0aW8tY2EiXSwiZXhwIjoxNjAwMjg2MzEyLCJpYXQiOjE2MDAyNDMxMTIsImlzcyI6Imt1YmVybmV0ZXMuZGVmYXVsdC5zdmMiLCJrdWJlcm5ldGVzLmlvIjp7Im5hbWVzcGFjZSI6ImlzdGlvLXN5c3RlbSIsInBvZCI6eyJuYW1lIjoiYXNwZW4tbWVzaC1tZXRyaWNzLWNvbGxlY3Rvci02Y2ZkN2JiYzdjLXRrcmJwIiwidWlkIjoiZDcxYzU1OTktZmE0Ny00ZDNjLWJhMmMtMzVmNjYwMTdjZDZiIn0sInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhc3Blbi1tZXNoLW1ldHJpY3MtY29sbGVjdG9yIiwidWlkIjoiZDJmYzJjMGQtYjk2Yi00Nzc3LTlkMTctNjdmMWM1ODM0NmJjIn19LCJuYmYiOjE2MDAyNDMxMTIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDppc3Rpby1zeXN0ZW06YXNwZW4tbWVzaC1tZXRyaWNzLWNvbGxlY3RvciJ9.Pdm1vstGFuAxr8DVamOQ37b8NJWb968dVmT7xr1HP1s8V4lN1eMYUr02piHpxKsSPGrQVybuA21ZnvGdhbol77qnuD_O_CezCYNjIlGDT8ugcS7-5dsulFAyZB4wIoq26K4KIprQvO4dFG8TPekgd5Zm1pGs2IVGArOySyrVq3QlOCn8Cu8V2GumhTQLY6TMmjoUopsWoYCON2uNAfkCEpXllA2_0BiEdQ9Rn2Ka-eli7DmWuoZB2QGSIUb5DS6_I_LsO0NyPVEYq7V-uH120KRXIaJOb8USCvgbGlFLqrpeIA2fkrwbmxB2-XRt2eX_e7eSHBCT1Xi_ubhEq4jJTg

这个token,通过jwt.io解开,可以看到payload是

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
  "aud": [
    "istio-ca"
  ],
  "exp": 1600286312,
  "iat": 1600243112,
  "iss": "kubernetes.default.svc",
  "kubernetes.io": {
    "namespace": "istio-system",
    "pod": {
      "name": "aspen-mesh-metrics-collector-6cfd7bbc7c-tkrbp",
      "uid": "d71c5599-fa47-4d3c-ba2c-35f66017cd6b"
    },
    "serviceaccount": {
      "name": "aspen-mesh-metrics-collector",
      "uid": "d2fc2c0d-b96b-4777-9d17-67f1c58346bc"
    }
  },
  "nbf": 1600243112,
  "sub": "system:serviceaccount:istio-system:aspen-mesh-metrics-collector"
}

该pod的sa是aspen-mesh-metrics-collector,audiences是istio-ca,是可以通过api-server的核查的(api-server的audience配置中包含了istio-ca)

容器内的应用可以直接使用该token与其它service(容器)通信,其它容器收到该jwt后对其进行验证(如果jwt是k8s系统平台自己签发的,则验证也通过k8s的tokenreview api来进行)

 

参考:

https://jpweber.io/blog/a-look-at-tokenrequest-api/#:~:text=service%2Daccount%2Dsigning%2Dkey%2Dfile%3A%20Path%20to,tokens%20with%20this%20private%20key.&text=The%20service%20account%20token%20authenticator,least%20one%20of%20these%20audiences.

https://github.com/jpweber/tokenrequest-demo

https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#service-account-token-volume-projection

相关文章

  • Container Egress Services 容器出向流量策略管控
  • How to build Nginx Plus as k8s Ingress controller and run with F5 CIS together
  • 如何为CIS发现的服务提供备份访问服务
  • kubeadm快速部署k8s 1.16.2
  • F5 CC 租户配置隔离配置方法
本作品采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可
标签: k8s serviceAccountToken Token Volume Projection
最后更新:2020年09月21日

纳米

linjing.io

打赏 点赞
< 上一篇
下一篇 >

文章评论

取消回复

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据。

纳米

linjing.io

☁️迈向Cloud Native ADC ☁️

认证获得:
TOGAF: ID 152743
Kubernetes: CKA #664
Microsoft: MCSE MCDBA
Cisco: CCNP
Juniper: JNCIS
F5:
F5 Certified Solution Expert, Security
F5 Certified Technology Specialist, LTM/GTM/APM/ASM
F5 Certified BIG-IP Administrator
  • 点击查看本博技术要素列表
  • 归档
    分类
    • Avi Networks
    • Cisco ACI
    • CISCO资源
    • F5 with ELK
    • F5-Tech tips
    • F5技术
    • Juniper
    • Linux
    • Nginx
    • SDN
    • ServiceMesh
    • WEB编程
    • WINDOWS相关
    • 业界文章
    • 交换机技术
    • 化云为雨/Openstack
    • 协议原理
    • 容器/k8s
    • 我的工作
    • 我的生活
    • 网站技术
    • 路由器技术
    • 项目案例
    标签聚合
    openstack nginx DNS istio F5 bigip irule k8s envoy network neutron api docker gtm flannel
    最近评论
    厚嘴唇 发布于 4 个月前(02月08日) ces部署必须是在kube-ovn网络安装好之后才可以吗
    平谷无颜祖 发布于 5 个月前(12月14日) 逐步加入dns及egress,不错不错
    minw9545 发布于 6 个月前(11月17日) 2021-11-18 23:36 现在是下午时间。
    minw9545 发布于 6 个月前(11月17日) 我放了奖励。 2021-11-18 11:36 请提供您的密码。
    xufan 发布于 9 个月前(09月02日) 需要迄今为止需要迄今为止最全最深入的BIGIP-DNS/GTM原理及培训资料 下载密码 我在202...
    浏览次数
    • Downloads - 75,888 views
    • Github - 72,089 views
    • F5常见log日志解释 - 58,156 views
    • 迄今为止最全最深入的BIGIP-DNS/GTM原理及培训资料 - 56,400 views
    • 联系我 - 49,645 views
    • Sniffer Pro 4 70 530抓包软件 中文版+视频教程 - 45,838 views
    • 这篇文档您是否感兴趣 - 36,610 views
    • 迄今为止最全最深入的BIGIP-DNS/GTM原理及培训资料 - 30,457 views
    • F5利用Elastic stack(ELK)进行应用数据挖掘系列(2)-DNS - 29,028 views
    • F5利用Elastic stack(ELK)进行应用数据挖掘系列(1)-HTTP - 28,000 views
    链接表
    • Jimmy Song‘s Blog
    • SDNap
    • SDNlab
    • SDN论坛
    • Service Mesh社区
    • 三斗室
    • 个人profile

    COPYRIGHT © 2022 Cloud Native应用交付. ALL RIGHTS RESERVED.

    Theme Kratos Made By Seaton Jiang

    京ICP备14048088号-1

    京公网安备 11010502041506号