`
lykops
  • 浏览: 86308 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

kubernetes资源类型--secret和Service Account

 
阅读更多

secret

概念

secret对象类型主要目的是保存和处理敏感信息/私密数据,比如密码,OAuth tokens,ssh keys等信息。将这些信息放在secret对象中比 直接放在pod或docker image中更安全,也更方便使用。

一个已经创建好的secrets对象有两种方式被pod对象使用,其一,在container中的volume对象里以file的形式被使用,其二,在pull images时被kubelet使用。

类型

Opaque任意字符串,默认类型

kubernetes.io/service-account-token:作用于ServiceAccount

kubernetes.io/dockercfg:作用于Docker registry,用户下载docker镜像认证使用

Opaque

创建

文件

实现把需要加密的内容实现base64编码

echo -n lykops | base64

bHlrb3Bz

echo -n 1qaz2wsx | base64

MXFhejJ3c3g=

然后写入lykops-secret.yaml

apiVersion: v1
kind: Secret
metadata:
  name: test-secret
  namespace: default
type: Opaque
data:
  password: MXFhejJ3c3g=
  username: bHlrb3Bz

导入kubectl create -f lykops-secret.yaml

命令行

kubectl createsecret generic lykops --secret --from-literal=username=lykops--from-literal=password=1qaz2wsx

pod引用

cat << EOF > lykops-secret.yaml
apiVersion: v1
kind: Pod
metadata:
 name: lykops-secret-pod
 labels:
   software: apache
   project: lykops
   app: lykops-secret-pod
   version: v1
spec:
 containers:
    -name: lykops-secret-pod
     image: web:apache
     command: ['sh' , '/etc/run.sh']
     env:
       - name: SECRET_USERNAME
         valueFrom:
           secretKeyRef:
             name: lykops-secret
             key: username
       - name: SECRET_PASSWORD
         valueFrom:
           secretKeyRef:
             name: lykops-secret
             key: password

EOF

kubectl create -f lykops-secret-pod.yaml

然后进入pod

kubectl exec -it lykops-secret-pod /bin/bash

执行env | grep -i '^SECRET_'

SECRET_USERNAME=lykops

SECRET_PASSWORD=1qaz2wsx

imagePullSecrets

当在需要安全验证的环境中拉取镜像时,需要通过用户名和密码。

apiVersion: v1
kind: Secret
metadata:
 name: myregistrykey
 namespace: awesomeapps
data:
 .dockerconfigjson:UmVhbGx5IHJlYWxseSByZWVlZWVlZWVlZWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGx5eXl5eXl5eXl5eXl5eXl5eXl5eSBsbGxsbGxsbGxsbGxsbG9vb29vb29vb29vb29vb29vb29vb29vb29vb25ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubmdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cgYXV0aCBrZXlzCg==
type: kubernetes.io/dockerconfigjson

·或者直接通过命令创建

kubectl create secret docker-registrymyregistrykey --docker-server=DOCKER_REGISTRY_SERVER--docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD--docker-email=DOCKER_EMAIL

·接下来拉取镜像的时候,就可以使用了

apiVersion: v1
kind: Pod
metadata:
 name: foo
 namespace: awesomeapps
spec:
 containers:
    -name: foo
     image: janedoe/awesomeapp:v1
 imagePullSecrets:
    -name: myregistrykey

·其实本质上还是kubelet把这个认证放到了docker的目录下面,如下:

Service Account

概念

Service Account(以下简称SA)的使用场景:运行在pod里的进程需要调用K8S API以及非K8S API的其它服务。SA

cat ~/.docker/config.json
{
   "auths": {
       "10.39.0.118": {
           "auth": "Y2hlbm1vOmNtMTM4MTE2NjY3ODY="
       },
       "10.39.0.12:5000": {
           "auth": "dXNlcjAxOjEyMzQ1YQ=="
       },
       "http://10.39.0.12:5000": {
           "auth": "dXNlcjAxOjEyMzQ1YQ=="
       }
    }
}
并不是给K8S集群的用户使用的,而是给pod里面的进程使用的,它为pod提供必要的身份认证。

如果K8S开启了SA(位于/etc/kubernetes/controller-manager的KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"),那么会在每个namespace下面都会创建一个默认的default的SA。

配置

当用户在namespace下创建pod时会默认使用sa。

……
 volumes:
  -name: default-token-rsf8r
   secret:
     defaultMode: 420
      secretName:default-token-rsf8r

具体看一下secret

kubectl get secret default-token-rsf8r -oyaml
apiVersion: v1
data:
 ca.crt:LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR2akNDQXFhZ0F3SUJBZ0lVZlpvZDJtSzNsa3JiMzR3NDhhUmtOc0pVVDJjd0RRWUpLb1pJaHZjTkFRRUwKQlFBd1pURUxNQWtHQTFVRUJoTUNRMDR4RURBT0JnTlZCQWdUQjBKbGFVcHBibWN4RURBT0JnTlZCQWNUQjBKbAphVXBwYm1jeEREQUtCZ05WQkFvVEEyczRjekVQTUEwR0ExVUVDeE1HVTNsemRHVnRNUk13RVFZRFZRUURFd3ByCmRXSmxjbTVsZEdWek1CNFhEVEUzTURVd01qQTNNekF3TUZvWERUSXlNRFV3TVRBM016QXdNRm93WlRFTE1Ba0cKQTFVRUJoTUNRMDR4RURBT0JnTlZCQWdUQjBKbGFVcHBibWN4RURBT0JnTlZCQWNUQjBKbGFVcHBibWN4RERBSwpCZ05WQkFvVEEyczRjekVQTUEwR0ExVUVDeE1HVTNsemRHVnRNUk13RVFZRFZRUURFd3ByZFdKbGNtNWxkR1Z6Ck1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBc2E5Zk1HVGd2MGl0YnlZcHoycXkKOThKWktXdWdFL0VPbXRYS2ExT0Y3ekUxSFh1cDFOVG8rNkhvUEFuR3hhVzg4Q0s0TENrbWhNSGFLdUxnT3IvVApOMGphdnc5YWlPeVdYR1hXUUxVN3U0aVhoaDV6a2N4bmZxRW9JOW9JV2dMTzVEL3hBL0tnZzRQZDRMeFdqMkFQCk4rcVdxQ2crU3BrdkpIQUZWL3IyTk1BbEIzNHBrK0t5djVQMDJSQmd6Y2xTeSs5OUxDWnlIQ1VocGl0TFFabHoKdUNmeGtBeUNoWFcxMWNKdVFtaDM4aFVKa0dhUW9OVDVSNmtoRTArenJDVjVkWnNVMVZuR0FydWxaWXpJY3kregpkeUZpYWYyaitITyt5blg4RUNySzR1TUF3Nk4zN1pnNjRHZVRtbk5EWmVDTTlPelk5czBOVzc1dHU5bHJPZTVqCnZRSURBUUFCbzJZd1pEQU9CZ05WSFE4QkFmOEVCQU1DQVFZd0VnWURWUjBUQVFIL0JBZ3dCZ0VCL3dJQkFqQWQKQmdOVkhRNEVGZ1FVK2RqMThRUkZyMWhKMVhGb1VyYUVVRnpEeVRBd0h3WURWUjBqQkJnd0ZvQVUrZGoxOFFSRgpyMWhKMVhGb1VyYUVVRnpEeVRBd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFBazQ4ODZBa0Fpa3VBVWRiOWU1CitldkVXVVFFaTIyTmc4REhmVTVSbXppU2ZhVllFQ1FuTlBUREprMmYvTm1Kb3RUVWxRZS9Ec3BkNEk1TFova1IKMGI2b1VoZkdmTkVOOXVObkkvZEgzOFBjUTNDaWtVeHhaeFRYTytaaldxcGNHZTRLNzZtaWd2ZWhQR2Z1VUNzQwp0UmZkZDM2YkhnRjN4MzRCWnc5MStDQ2VKQzBSWmNjVENqcHFHUEZFQlM3akJUVUlRVjNodnZycWJMV0hNeTJuCnFIck94UFI1eFkrRU5SQ0xzVWNSdk9icUhBK1g0c1BTdzBwMWpROXNtK1lWNG1ybW9Gd1RyS09kK2FqTVhzVXkKL3ZRYkRzNld4RWkxZ2ZvR3BxZFN6U1k0MS9IWHovMjZWNlFWazJBajdQd0FYZmszYk1wWHdDamRXRG4xODhNbQpXSHM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
 namespace: ZGVmYXVsdA==
 token:ZXlKaGJHY2lPaUpTVXpJMU5pSXNJblI1Y0NJNklrcFhWQ0o5LmV5SnBjM01pT2lKcmRXSmxjbTVsZEdWekwzTmxjblpwWTJWaFkyTnZkVzUwSWl3aWEzVmlaWEp1WlhSbGN5NXBieTl6WlhKMmFXTmxZV05qYjNWdWRDOXVZVzFsYzNCaFkyVWlPaUprWldaaGRXeDBJaXdpYTNWaVpYSnVaWFJsY3k1cGJ5OXpaWEoyYVdObFlXTmpiM1Z1ZEM5elpXTnlaWFF1Ym1GdFpTSTZJbVJsWm1GMWJIUXRkRzlyWlc0dGNuTm1PSElpTENKcmRXSmxjbTVsZEdWekxtbHZMM05sY25acFkyVmhZMk52ZFc1MEwzTmxjblpwWTJVdFlXTmpiM1Z1ZEM1dVlXMWxJam9pWkdWbVlYVnNkQ0lzSW10MVltVnlibVYwWlhNdWFXOHZjMlZ5ZG1salpXRmpZMjkxYm5RdmMyVnlkbWxqWlMxaFkyTnZkVzUwTG5WcFpDSTZJakJrWlRJek5UYzFMVEptTURJdE1URmxOeTA1T0dRd0xUVXlOVFJqTkRZeU9HRmtPU0lzSW5OMVlpSTZJbk41YzNSbGJUcHpaWEoyYVdObFlXTmpiM1Z1ZERwa1pXWmhkV3gwT21SbFptRjFiSFFpZlEuSmxuamM0Y0xNYkZrRlJVQjIyWGtFN2t4bTJ1dS1aQm9sUTh4VEdDNmdLOTdSZTVOMzBuY2V0SWJsanVOVWFlaDhtMDk2R19nMHE3cmRvWm5XMTV2OFBVXzNyM1hWWlBNc1lxbGRpZlNJbWtReXFqeEphVlBka3Izam5GWVBkVWNaTmk3MFF3cWtEdm5sMXB4SFRNZTZkTVNPTlExbUVoMHZSbHBhRTdjVWtTVlg5blRzaFVJVTVXWE9wRUxwdTVjVjBHV3ZGeDRDSzR6Umt3clNMdlV5X2d5UGZwLWdYVFZQWU80NkJKSWZtaVhlZGhVaW9nempPN285eGxDbUxQVkhyNkFIZGViNExiTVA1dkJ2MlBSZ2RrMW9keTR0VEdxLVRGU3M2VkNoMTZ4dk5IdTRtRVN5TjZmcXVObzJwYUFOelY4b251aTJuaU4yNTU1TzN4SFdR
kind: Secret
metadata:
 annotations:
   kubernetes.io/service-account.name: default
   kubernetes.io/service-account.uid: 0de23575-2f02-11e7-98d0-5254c4628ad9
 name: default-token-rsf8r
 namespace: default
 resourceVersion: "12551"
 selfLink: /api/v1/namespaces/default/secrets/default-token-rsf8r
  uid:75c0a236-2f02-11e7-98d0-5254c4628ad9
type: kubernetes.io/service-account-token

上面的内容是经过base64加密过后的,直接进入容器内:

ls -l /var/run/secrets/kubernetes.io/serviceaccount/
total 0
lrwxrwxrwx   1 root     root            13 May  4 23:57 ca.crt -> ..data/ca.crt
lrwxrwxrwx   1 root     root            16 May  4 23:57 namespace -> ..data/namespace
lrwxrwxrwx   1 root     root            12 May  4 23:57 token -> ..data/token

可以看到已将ca.crt 、namespace和token放到容器内了,那么这个容器就可以通过https的请求访问apiserver了。

分享到:
评论

相关推荐

    kubernetes-dashboard.yaml

    serviceAccountName: kubernetes-dashboard # Comment the following tolerations if Dashboard must not be deployed on master tolerations: - key: node-role.kubernetes.io/master effect: NoSchedule ---...

    kubernetes安装 kubernetes -dashbard

    文档中也提供了一个示例YAML文件,其中包括了创建Dashboard专用的Secret、ServiceAccount以及一个简单的Role,该Role授权Dashboard创建特定的Secret,名为"kubernetes-dashboard-key-holder"。 5. 访问控制和授权。...

    k8s and docker.zip

    网盘文件永久链接 ...15-kubernetes认证及serviceaccount 16-kubernetes RBAC 17-kubernetes dashboard认证及分级授权 18-配置网络插件flannel 19-基于canel的网络策略 20-调度器、预选策略及优选函数 .......

    kubernetes-handbook-jimmysong-v1.4-20180903.pdf

    对于安全性,ServiceAccount和RBAC(基于角色的访问控制)确保了资源的访问权限。NetworkPolicy允许精细的网络流量控制,Secret和ConfigMap则用于管理敏感信息和配置数据。持久化存储通过Persistent Volume和Storage...

    k8s培训视频.zip

    目录网盘文件永久链接 ...15-kubernetes认证及serviceaccount 16-kubernetes RBAC 17-kubernetes dashboard认证及分级授权 18-配置网络插件flannel 19-基于canel的网络策略 20-调度器、预选策略及优选函数 ...

    2、Kubernetes 集群安全 - 认证1

    为了管理ServiceAccount和相关的Secret,可以使用`kubectl get secret --all-namespaces`命令查看所有命名空间的Secret,以及`kubectl describe secret default-token-5gm9r --namespace=kube-system`命令来详细描述...

    Kubernetes Dashboard 部署.docx

    kubectl create clusterrolebinding admin-user --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:admin-user ``` **暴露服务端口**: 1. **修改 services 配置文件**:将 `type: ClusterIP`...

    K8S 部署资源文件,包含kube-flannel+kubernetes-dashboard+ingress

    为了安全访问Dashboard,通常会使用ServiceAccount和RoleBinding来限制权限,并可能通过设置TLS证书进行加密通信。 **kubernetes-dashboard-ingress.yml** `kubernetes-dashboard-ingress.yml`文件用于配置Ingress...

    基于kubernetes构建Docker集群环境视频教程.zip

    目录网盘文件永久链接 01-Devops核心要点及kubernetes架构概述.mp4 02-kubernetes基础概念.mp4 03-kubeadm初始化...15-kubernetes认证及serviceaccount.mp4 16-kubernetes RBAC.mp4 17-kubernetes dashboard......

    基于kubernetes构建Docker集群环境培训视频.rar

    │ 15-kubernetes认证及serviceaccount.mp4 │ 16-kubernetes RBAC.mp4 │ 17-kubernetes dashboard认证及分级授权.mp4 │ 18-配置网络插件flannel.mp4 │ 19-基于canel的网络策略.mp4 │ 20-调度器、预选策略及优选...

    kubernetes-dashboard

    - 使用 kubectl 应用 Dashboard 的 YAML 清单文件(如 `manifest.json`),创建 Dashboard 的 ServiceAccount、Role、RoleBinding 和 Deployment。 - 配置访问控制,例如通过 kubectl 命令创建一个临时的 Token 或者...

    kubernetes-perfect-guide:“ Kubernetes完全ガイド”の付录マニフェストのリポジトリ“ Kubernetes完美指南”样本清单库

    - **ServiceAccount**:每个Pod都有一个ServiceAccount,用于权限控制和身份认证。 5. **扩展与定制**: - **CustomResourceDefinition (CRD)**:允许创建自定义的资源类型,实现Kubernetes的扩展。 - **...

    kubernetes-handbook, Kubernetes Handbook (Kubernetes指南) https.zip

    5. **安全与认证**:Kubernetes的安全模型,包括RBAC(Role-Based Access Control)、ServiceAccount、TLS认证和密钥管理,以及如何设置和管理这些安全策略。 6. **监控与日志**:如何集成Prometheus、Grafana等...

    容器管理平台K8S视频.zip

    目录网盘文件永久链接 01-Devops核心要点及kubernetes架构概述.mp4 02-kubernetes基础概念.mp4 03-kubeadm初始化...15-kubernetes认证及serviceaccount.mp4 16-kubernetes RBAC.mp4 ...........................

    kubernetes-handbook

    - **目标**:该手册旨在为用户提供一个全面且深入理解Kubernetes的资源集合,包括概念、实践、案例分析等,帮助读者更好地掌握Kubernetes的核心技术和应用场景。 #### 二、概念原理 - **设计理念**:Kubernetes的...

    如何配置kubernetes-dashboard.zip

    你可以使用`kubectl create serviceaccount`和`kubectl get secret`命令生成一个临时的token,然后在登录页面输入。 如果你的环境要求更高的安全性,你可能需要配置OAuth2代理或者其他认证机制,如使用Google或...

    kubernetes中文文档

    - **ServiceAccount**: 为 Pod 提供身份认证。 - **StatefulSet**: 管理有状态的应用程序实例。 - **ThirdPartyResources**: 已弃用,用于自定义资源的旧方式。 - **Volume**: Pod 中容器共享的持久化存储空间。 ##...

    k8s(kubernetes)常见运维面试题-专题150题

    - **ServiceAccount**: 为 Pod 提供了一个可以使用 API 的身份,通过 ServiceAccount 绑定 Role 或 ClusterRole 来限制 Pod 对 Kubernetes API 的访问权限。 ### 2. Pod 服务健康检查 - **LivenessProbe(存活检查...

Global site tag (gtag.js) - Google Analytics