文档章节

Kubernetes集群安全配置

WaltonWang
 WaltonWang
发布于 2017/06/07 23:27
字数 808
阅读 242
收藏 2

更多关于kubernetes的深入文章,请看我csdn或者oschina的博客主页。

这两天在梳理Kubernetes集群的安全配置,涉及到各个组件的配置,最终决定画一个图来展现,应该会更清晰。

这里写图片描述

涉及以下配置:

  1. 其他各个组件作为client,访问kube-apiserver时,各个组件的配置,参考图中黑色线条对应的配置:

    - **kube-apiserver**
    
        ```	
    

    --secure-port=443 --client_ca_file=/var/run/kubernetes/dd_ca.crt --tls-private-key-file=/var/run/kubernetes/dd_server.key ```

    • kube-controller-manager

        ```
        --kubeconfig=/etc/kubernetes/cmkubeconfig
      
        apiVersion: v1
        kind: Config
        users
        - name: controllermanager
          user:
            client-certificate: /var/run/kubernetes/dd_cs_client.crt
            client-key: /var/run/kubernetes/dd_cs_client.key
        clusters:
        - name: local
          cluster:
            certificate-authority: /var/run/kubernetes/dd_ca.crt
        contexts:
        - context:
            cluster: local
            user: controllermanager
          name: my-context
        current-context: my-context
        ```
      
    • kube-scheduler kube-scheduler访问apiserver的安全配置同kube-controller-manager。

    • kubelet

      	--kubeconfig=/var/lib/kubelet/kubeconfig
      
      	apiVersion: v1
      	kind: Config
      	users:
      	- name: kubelet
      	  user:
      	    client-certificats: /home/dd_kubelet_client.crt
      	    client-key: /home/dd_kubelet_client.key
      	clusters:
      	- name: local
      	  cluster:
      	    certificate-authority: /home/dd_ca.crt
      	contexts:
      	- context:
      	    cluster: local
      	    user: kubelet
      	  name: my-context
      	current-context: my-context
      
      
    • kube-proxy

      	--kubeconfig=/var/lib/kubeproxy/proxykubeconfig 
      
      	apiVersion: v1
      	kind: Config
      	users:
      	- name: kubeproxy
      	  user:
      	    client-certificate: /home/dd_kubelet_client.crt
      	    client-key: /home/dd_kubelet_client.key
      	clusters:
      	- name: local
      	  cluster:
      	    certificate-authority: /home/dd_ca.crt
      	contexts:
      	- context:
      	    cluster: local
      	    user: kubeproxy
      	  name: my-context
      	current-context: my-context
      
  2. kube-apiserver作为client,访问kubelet server时的配置,参考图中绿色线条对应的配置:

    • kube-apiserver

      --kubelet-https
      --kubelet-certificate-authority=/var/run/kubelet/kubelet-ca.crt  
      --kubelet-client-certificate=/var/run/kubelet/apiserver-kubelet.crt
      --kubelet-client-key=/var/run/kubelet/apiserver-kubelet.key
      
    • kubelet

      --client-ca-file=/var/run/kubelet/kubelet_ca.crt
      --tls-private-key-file=/var/run/kubelet/server.key
      --tls-cert-file string=/var/run/kubelet/server.crt
      
  3. Pod访问kube-apiserver,是通过ServiceAccount来提供Token的, 涉及的配置见粉红色线条对应的内容。

    • Pod.Spec

    每个namespace都有一个default ServiceAccount。如果Pod.Spec.serivceAccountName未设置,这默认用default ServiceAccount。上图中的配置中,给Pod指明了一个自定义的Pod.Spec.serivceAccountName:build-rebotautomountServiceAccountToken: true表示自动将该ServiceAccount中的Secret定义的token,ca.crt,namespace挂载到Pod每个container内的以下对应目录:

    ServiceAccount Admission Make Sure Secret Volume Mounted:
    

/var/run/secrets/kubernetes.io/serviceaccount/token /var/run/secrets/kubernetes.io/serviceaccount/ca.crt /var/run/secrets/kubernetes.io/serviceaccount/namespace ```

- **kube-controller-manager**

    ```
    --root-ca-file=/var/run/kubernetes/dd_ca.crt 
    --service-account-private-key-file=/var/run/kubernetes/dd_server.key
    ```

这样Pod内的应用就能通过以下两种方式访问apiserver了:

- 添加kubectl proxy container,示例见[kubectl-container](https://github.com/kubernetes/kubernetes/tree/master/examples/kubectl-container/)

- use the Go client library, and create a client using the rest.InClusterConfig() and kubernetes.NewForConfig() functions. They handle locating and authenticating to the apiserver. [example](https://github.com/kubernetes/client-go/blob/master/examples/in-cluster/main.go)

4. kube-apiserver作为client,通过TLS访问etcd对应的配置见图中蓝色线条对应的内容。

- **kube-apiserver**

    ```
    --kubelet-https
    --kubelet-certificate-authority=/var/run/kubelet/etcd-ca.crt  
    --kubelet-client-certificate=/var/run/kubelet/etcd-kubelet.crt
    --kubelet-client-key=/var/run/kubelet/etcd-kubelet.key
    ```
- **etcd**

    ```
    --client-cert-auth 
    --trusted-ca-file=/etc/ssl/etcd/etcd-ca.crt 
    --cert-file=/etc/ssl/etcd/server.crt 
    --key-file=/etc/ssl/etcd/server.key
    ```
  1. apiserver的Authentication Config:

    • kube-apiserver 以下三个flag,分别表示enable apiserver的x509 client certs, static token, static password三种认证方式。

      --client-ca-file=/var/run/kubernetes/dd_ca.crt    
      --token-auth-file=SOMEFILE  
      --basic-auth-file=SOMEFILE  
      

    其中token-auth-file对应文件内容格式为:

     ```
     token1,user1,uid1,”group1,group2,group3"
     token2,user2,uid2,”group1,group2"
     ```
    

    basic-auth-file对应文件内容格式为:

     ```
     password1,user1,uid1,”group1,group2,group3"
     password2,user2,uid2,”group1,group2,group3"
     ```
    
  2. apiserver的Authorization Config:

    • kube-apiserver 当前我们的环境中,使用默认值AlwaysAllow,如果有需要,后续会考虑enable RBAC

      --authorization-mode=AlwaysAllow
      
  3. apiserver的Admission Control Config:

    • kube-apiserver 使用官方推荐的,v1.6+之后的配置为:

      --admission-control=NamespaceLifecycle,
      LimitRanger,
      ServiceAccount,
      PersistentVolumeLabel,
      DefaultStorageClass,
      ResourceQuota,
      DefaultTolerationSeconds
      

更多关于kubernetes的深入文章,请看我csdn或者oschina的博客主页。

© 著作权归作者所有

共有 人打赏支持
WaltonWang
粉丝 196
博文 100
码字总数 207940
作品 0
深圳
程序员
私信 提问
Rancher 2.0 正式发布:加速企业 Kubernetes 落地

Rancher Labs 团队宣布 Rancher 2.0 已正式发布! Rancher 2.0 是一个 100% 开源的 Kubernetes 管理平台,为企业用户提供 Kubernetes-as-a-Service (Kubernetes即服务),并且 Rancher 2.0 能...

王练
05/03
2.8K
13
关于Kubernetes CVE-2018-1002105 提权漏洞的修复公告

近日Kubernetes社区发现安全漏洞 CVE-2018-1002105。通过伪造请求,Kubernetes用户可以在已建立的API Server连接上提权访问后端服务,阿里云容器服务已第一时间修复,请登录阿里云控制台升级...

志敏
12/05
0
0
K8s爆严重安全漏洞?有何应对措施与建议

Kubernetes最近爆出严重安全漏洞,影响几乎目前所有的版本。实际影响究竟多大?老版本用户是否必须升级?以下是华为云容器服务团队对该漏洞的分析解读。 Kubernetes爆出的严重安全漏洞: 攻击...

云容器大师
12/05
0
0
扎心!Kubernetes企业落地六大“难”

Kubernetes已经迅速成为企业从容器和云中获得最大收益的必备平台之一。然而,对于风险厌恶型的大规模企业而言,这种快速发展带来了重大挑战。 ZeroStack产品管理副总裁Kamesh Pemmaraju最近提...

K8S技术社区
03/01
0
0
Kubernetes管理员的11条安全军规

自从Kubernetes项目开天辟地以来, 其安全性已经取得了长足的发展, 但它目前依然还有些要点值得注意。 本文列举了11条军规来帮助让你的集群在稳定运行时加固安全,以及在受到危害时对抗冲击...

Docker
08/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

使用CURL检测Clinet侧发起的HTTP请求各阶段时间

第一、HTTP请求的过程介绍 一个HTTP请求,涉及多个阶段 1、DNS解析域名 2、请求从Clinet路由至Server,Clinet与Server建立TCP连接 3、如果使用了HTTPS,还涉及SSL连接的建立 4、server开始准...

李玉长
3分钟前
0
0
Flume+Kafka双剑合璧玩转大数据平台日志采集

概述 大数据平台每天会产生大量的日志,处理这些日志需要特定的日志系统。 一般而言,这些系统需要具有以下特征: 构建应用系统和分析系统的桥梁,并将它们之间的关联解耦; 支持近实时的在线...

java菜分享
9分钟前
0
0
Jenkins 分布式-管理节点

什么是Jenkins的分布式构建: Jenkins的分布式构建,在Jenkins的配置中叫做节点;能够让同一套代码或项目在不同的环境分发 节点配置 系统设置 - 节点管理 - 新建节点...

以谁为师
16分钟前
0
0
图片无限轮播

<!doctype html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, max......

shawnDream
18分钟前
1
0
js 在==时,则会有一些让人难以理解的陷阱

在==时,则会有一些让人难以理解的陷阱。 (function () { var undefined; undefined == null; // true 1 == true; //true 2 == true; // false 0 == false; // true 0 == ''; // true NaN ==......

之渊
21分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部