kubernetes的Service Account_码农崛起-CSDN博客

标签: | 发表时间:2021-07-22 22:58 | 作者:
出处:https://blog.csdn.net

kubernetes的Service Account

  1. Service account作用
    Service account是为了方便Pod里面的进程调用Kubernetes API或其他外部服务。
  2. Service account使用场景
    运行在pod里的进程需要调用Kubernetes API以及非Kubernetes API的其它服务。Service Account它并不是给kubernetes集群的用户使用的,而是给pod里面的进程使用的,它为pod提供必要的身份认证。
  3. 与User account区别
    (1)User account是为人设计的,而service account则是为了Pod中的进程;
    (2)User account是跨namespace的,而service account则是仅局限它所在的namespace;
  4. 实战

       

      #定义namespace:test
cat >> test.yaml << EOF
apiVersion: v1
kind: Namespace
metadata:
    name: test
     labels:
         name: test
      #创建namespace:test
kubectl create -f ./test.yaml
      #查看命名空间test的sa
kubectl get sa -n test
NAME      SECRETS   AGE
default   1         3h
##说明:
(1)如果kubernetes开启了ServiceAccount(–admission_control=…,
ServiceAccount,… )那么会在每个namespace下面都会创建一个默认的default
的sa。如上命令查看的default !
(2)ServiceAccount默认是开启的。
      #查看命名空间test生成的default
kubectl get sa default -o yaml -n test
apiVersion: v1
kind: ServiceAccount
metadata:
    creationTimestamp: 2018-05-31T06:21:10Z
    name: default
    namespace: test
    resourceVersion: "45560"
    selfLink: /api/v1/namespaces/test/serviceaccounts/default
    uid: cf57c735-649a-11e8-adc5-000c290a7d06
secrets:
- name: default-token-ccf9m
##说明:
(1)当用户再该namespace下创建pod的时候都会默认使用这个sa;
(2)每个Pod在创建后都会自动设置spec.serviceAccount为default(除非指定
了其他ServiceAccout);
(3)每个container启动后都会挂载对应的token和ca.crt到/var/run/secrets/
kubernetes.io/serviceaccount/。
      #创建deploy
cat >> nginx_deploy.yaml << EOF
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
    name: nginx-test
    namespace: test
spec:
    replicas: 2
    template:
        metadata:
            labels:
                app: nginx
        spec:
            containers:
            - name: nginx
                image: nginx:1.7.9
                ports:
                - containerPort: 80
      #查看生成的Pods
kubectl get po -n test
NAME                          READY     STATUS    RESTARTS   AGE
nginx-test-75675f5897-7l5bc   1/1       Running   0          1h
nginx-test-75675f5897-b7pcn   1/1       Running   0          1h
      #查看其中一个Pod的详细信息,如:nginx-test-75675f5897-7l5bc
kubectl describe po nginx-test-75675f5897-7l5bc -n test
##其中default-token-ccf9m,请留意!
Environment:    <none>
Mounts:
  /var/run/secrets/kubernetes.io/serviceaccount from default-token-ccf9m (ro)
Conditions:
Type           Status
Initialized    True
Ready          True
PodScheduled   True
Volumes:
default-token-ccf9m:
Type:        Secret (a volume populated by a Secret)
SecretName:  default-token-ccf9m
##说明:
(1)每个Pod在创建后都会自动设置spec.serviceAccount为default(除非指定
了其他ServiceAccout);
(2)每个container启动后都会挂载对应的token和ca.crt到/var/run/secrets/
kubernetes.io/serviceaccount/。
      #进入其中一个Pod的容器内,如:nginx-test-75675f5897-7l5bc
kubectl exec -it nginx-test-75675f5897-7l5bc  /bin/bash --namespace=test
##在容器内执行:
ls -l  /var/run/secrets/kubernetes.io/serviceaccount/
lrwxrwxrwx 1 root root 13 May 31 08:15 ca.crt -> ..data/ca.crt
lrwxrwxrwx 1 root root 16 May 31 08:15 namespace -> ..data/namespace
lrwxrwxrwx 1 root root 12 May 31 08:15 token -> ..data/token
##说明:
可以看到已将ca.crt 、namespace和token放到容器内了,那么这个容器就
可以通过https的请求访问apiserver了。

 

5.手动创建Service Account

      #编辑heapster_test.yaml文件
cat >> heapster_test.yaml <<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
    name: heapster
    namespace: test
      #创建Service Account:heapster
kubectl create -f heapster_test.yaml
serviceaccount "heapster" created
      #查看Service Account:heapster
kubectl get sa -o yaml -n test
##主要内容如下:
    secrets:
    - name: heapster-token-7xrlg

6.Service Account鉴权

Service Account为服务提供了一种方便的认知机制,但它不关心授权的问题。可以配合RBAC来为Service Account鉴权:

      (1)配置--authorization-mode=RBAC和--runtime-config=rbac.authorization.k
8s.io/v1alpha1
(2)配置--authorization-rbac-super-user=admin
(3)定义Role、ClusterRole、RoleBinding或ClusterRoleBinding

#实战
我们在 Kubernetes Dashboard1.8.3部署中,碰到首次登入出现访问权限报错的问题,原因就是ServiceAccount的创建问题。

      cat >> kube-dashboard-access.yaml << EOF
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
      name: kubernetes-dashboard
      labels:
          k8s-app: kubernetes-dashboard
roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: cluster-admin
subjects:
    - kind: ServiceAccount
      name: kubernetes-dashboard
      namespace: kube-system

7.参考文章

   https://www.ctolib.com/docs/sfile/kubernetes-handbook/architecture/serviceaccount.html
   https://blog.csdn.net/u010278923/article/details/72857928

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

相关 [kubernetes service account] 推荐:

Kubernetes Service iptables 网络通信验证

- - 三点水
Kubernetes gives Pods their own IP addresses and a single DNS name for a setof Pods, and can load-balance across them.. K8s Service会为每个 Pod 都设置一个它自己的 IP,并为一组 Pod 提供一个统一的 DNS 域名,还可以提供在它们间做负载均衡的能力.

Kubernetes学习笔记之kube-proxy service实现原理 – 运维派

- -
我们生产k8s对外暴露服务有多种方式,其中一种使用. external-ips clusterip service ClusterIP Service方式对外暴露服务,kube-proxy使用iptables mode. 这样external ips可以指定固定几台worker节点的IP地址(worker节点服务已经被驱逐,作为流量转发节点不作为计算节点),并作为lvs vip下的rs来负载均衡.

kubernetes的Service Account_码农崛起-CSDN博客

- -
kubernetes的Service Account. Service account作用. Service account是为了方便Pod里面的进程调用Kubernetes API或其他外部服务. Service account使用场景. 运行在pod里的进程需要调用Kubernetes API以及非Kubernetes API的其它服务.

SPRING BOOT OAUTH2 + KEYCLOAK - service to service call

- - BlogJava-首页技术区
employee-service调用department-service,如果要按OAUTH2.0流程,只需要提供client-id和client-secrect即可. 在KEYCLOAK中引入service-account,即配置该employee-service时,取消standard-flow,同时激活service-account.

Web Service入门

- - 博客 - 伯乐在线
本文来自文章作者 @Jeremy黄国华 的投稿. 伯乐在线也欢迎其他朋友投稿,投稿时记得留下您的新浪微博账号哦~. 目前对Web Service没有统一的定义,定义一:Web Service是自包含的、模块化的应用程序,它可以在Web中被描述、发布、查找以及调用. 定义二:Web Service是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Service能与其他兼任的组件进行操作.

Android Service 详解

- - CSDN博客移动开发推荐文章
一个Service也是一种应用程序组件,它运行在后台以提供某种服务,通常不具有可见的用户界面. 其它的应用程序组件可以启动一个Service,即使在用户切换到另外一个应用程序后,这个Service还是一直会在后台运行. 此外,一个应用程序也可以绑定到一个Service然后使用进程间通信(IPC)方式与Service之间发生交互.

【转】 Service Manager

- - 移动开发 - ITeye博客
android2.3 ---  Service Manager分析. Android系统Binder机制的总管是Service Manager,所有的Server(System Server)都需要向他注册,应用程序需要向其查询相应的服务. 可见其作用是多么的重要,那么我们这里就要重点介绍一下这个.

Kubernetes & Microservice

- - 午夜咖啡
这是前一段时间在一个微服务的 meetup 上的分享,整理成文章发布出来. 谈微服务之前,先澄清一下概念. 微服务这个词的准确定义很难,不同的人有不同的人的看法. 比如一个朋友是『微服务原教旨主义者』,坚持微服务一定是无状态的 http API 服务,其他的都是『邪魔歪道』,它和 SOA,RPC,分布式系统之间有明显的分界.

Web Service的研究

- - CSDN博客系统运维推荐文章
SOA和Web Service. 首先明白SOA和Web Service的关系:. * SOA面向服务架构,用于大型分布式系统的一个概念;. * Web Service是实现SOA的方式之一,不是所有的SOA都是基于Web service的;. * 但Webservice确实为最主流的SOA实现方式,有的人甚至把SOA等同于Webservice.

Kubernetes学习(Kubernetes踩坑记)

- - Z.S.K.'s Records
记录在使用Kubernetes中遇到的各种问题及解决方案, 好记性不如烂笔头. prometheus提示 /metrics/resource/v1alpha1 404. 原因: 这是因为[/metrics/resource/v1alpha1]是在v1.14中才新增的特性,而当前kubelet版本为1.13.