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

原文地址:http://blog.51cto.com/wutengfei/2122570

时间: 2024-10-06 00:54:48

kubernetes的Service Account的相关文章

kubernetes的Service Account和secret

系列目录 Service Account Service Account概念的引入是基于这样的使用场景:运行在pod里的进程需要调用Kubernetes API以及非Kubernetes API的其它服务.Service Account它并不是给kubernetes集群的用户使用的,而是给pod里面的进程使用的,它为pod提供必要的身份认证. kubectl get sa --all-namespaces NAMESPACE NAME SECRETS AGE default build-robo

错误: No API token found for service account &quot;default&quot;,

[[email protected] pods]# kubectl create -f mysql.yaml Error from server (ServerTimeout): error when creating "mysql.yaml": No API token found for service account "default", retry after the token is automatically created and added to t

SQL Server 2012 Managed Service Account

原创地址:http://www.cnblogs.com/jfzhu/p/4007472.html 转载请注明出处 (一)Windows服务使用的登陆帐号 Windows服务只有登录到某一帐户的情况下才能访问操作系统中的资源和对象.服务一般不要更改默认的登录帐户,否则可能导致服务失败.如果选定帐户没有足够的权限,Microsoft 管理控制台(MMC)的服务管理单元将自动为该帐户授予登录所管理计算机中服务的用户权限.Windows Server 的服务可以用域帐户或者三个内置的本地帐户作为各系统服

Reporting Service 配置Service Account

1,Service Account SSRS以一个Service方式实现,有三部分组成:Web Service,Report Manager和一个后台的进程,这个Service运行的账号就是Service Account.虽然Report Server Web service and Report Manager都是Asp.net应用程序,但是他们并不运行在Asp.net应用程序的 Account(在 Application Pool 中配置 Identity)下,Report Server W

Creating a keytab file for the Kerberos service account (using the ktutil command on Linux)

https://docs.tibco.com/pub/spotfire_server/7.13.0/doc/html/TIB_sfire_server_tsas_admin_help/GUID-27726F6E-569C-4704-8433-5CCC0232EC79.html This method of creating a keytab file on Linux uses the ktutil command. Prerequisites Kerberos is installed on

Kubernetes Nginx Service发现并访问

启动nginx service: kubectl run nginx --image=nginx 查看service状态: kubectl get services 发现只有kubernets service: kubernetes   10.254.0.1     <none>        443/TCP   1d 使用如下命令暴露nginx: kubectl expose deployment nginx --port=80 --type=LoadBalancer 再次查看service

Kubernetes学习 Service + Rolling Update(三)

四.外网如何访问Service 除了 Cluster 内部可以访问 Service,很多情况下我们也希望应用的 Service 能够暴露给 Cluster 外部.Kubernetes 提供多种类型的 Service,默认是 Cluster IP.     (1)Cluster IP Service 通过 Cluster 内部的 IP 对外提供服务,只有 Cluster 内部的节点和 Pod 可访问,这是默认的 Service 类型,前面实验中的 Service 都是 CLuster IP. (2

Kubernetes(7) Service &amp; Network (advanced)

从上一章节我们做了一个Service提供服务给单节点Redis数据库的实验.在这一章我们要深入Service中去,来弄清Service的工作原理. 1 Kubernetes 如何向客户端提供网络功能 Kubernetes中有三种网络类型:Node Network,Pod Network 和 Cluster Network(virutal IP).其中Node 和 Pod Network 都是实实在在的网络设备上的IP,Cluster Network (Service Network) 则是虚拟的

kubernetes学习Service之headless

一.首先说headless Service和普通Service的区别headless不分配clusterIPheadless service下的Pod有DNS地址,可以通过Pod的DNS地址解析到Pod的IP地址普通的service下的Pod没有DNS,只能通过svc的DNS解析到svc的clusterIP Service的ClusterIP工作原理:一个service可能对应一组endpoints(所有pod的地址+端口),client访问ClusterIP,通过iptables或者ipvs转