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日 9137点热度 1人点赞 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

相关文章

  • 项目:k8s Gateway API 的BIG-IP实现
  • F5 CES 用融合的思想保护k8s出向流量安全
  • 是时候思考k8s出向流量安全了
  • Container Egress Services 容器出向流量策略管控
  • How to build Nginx Plus as k8s Ingress controller and run with F5 CIS together
本作品采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可
标签: k8s serviceAccountToken Token Volume Projection
最后更新:2020年09月21日

纳米

linjing.io

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

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理。

页面AI聊天助手

纳米

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
  • 点击查看本博技术要素列表
  • 归档
    分类
    • AI
    • Automation
    • Avi Networks
    • Cisco ACI
    • CISCO资源
    • F5 with ELK
    • F5-Tech tips
    • F5技术
    • Juniper
    • Linux
    • NGINX
    • SDN
    • ServiceMesh
    • WEB编程
    • WINDOWS相关
    • 业界文章
    • 交换机技术
    • 化云为雨/Openstack
    • 协议原理
    • 容器/k8s
    • 我的工作
    • 我的生活
    • 网站技术
    • 路由器技术
    • 项目案例
    标签聚合
    bigip F5 nginx openstack flannel istio neutron DNS k8s network envoy gtm api docker irule
    最近评论
    汤姆 发布于 10 个月前(09月10日) 嗨,楼主,里面的json怎么下载啊,怎么收费啊?
    汤姆 发布于 10 个月前(09月09日) 大佬,kib的页面可以分享下吗?谢谢
    zhangsha 发布于 1 年前(05月12日) 资料发给我下,谢谢纳米同志!!!!lyx895@qq.com
    李成才 发布于 2 年前(01月02日) 麻烦了,谢谢大佬
    纳米 发布于 2 年前(01月02日) 你好。是的,因为以前下载系统插件在一次升级后将所有的下载生成信息全弄丢了。所以不少文件无法下载。DN...
    浏览次数
    • Downloads - 185,059 views
    • 联系我 - 118,966 views
    • 迄今为止最全最深入的BIGIP-DNS/GTM原理及培训资料 - 118,790 views
    • Github - 105,374 views
    • F5常见log日志解释 - 80,520 views
    • 从传统ADC迈向CLOUD NATIVE ADC - 下载 - 77,494 views
    • Sniffer Pro 4 70 530抓包软件 中文版+视频教程 - 74,320 views
    • 迄今为止最全最深入的BIGIP-DNS/GTM原理及培训资料 - 67,770 views
    • 关于本站 - 62,160 views
    • 这篇文档您是否感兴趣 - 56,043 views
    链接表
    • F5SE创新
    • Jimmy Song‘s Blog
    • SDNlab
    • Service Mesh社区
    • 三斗室
    • 个人profile
    • 云原生社区

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

    Theme Kratos Made By Seaton Jiang

    京ICP备14048088号-1

    京公网安备 11010502041506号