[TOC] Security - 集群安全 描述: Kubernetes 作为一个分布式的集群管理工具,保证集群的安全性是非常至关重要的。 同时由于API Server是集群内部各个组件通信的中介,也是外部控制的入口,所以Kubernetes的安全机制基本是就是围绕保护API Server 来进行设计的; Kubernetes 使用了认证( /service-account.name: default # kubernetes.io/service-account.uid: 6458d317-c72e-4fe9-b8fd-ed65b5b52718 -70b5-4814-9ce8-018250d90766 # type: kubernetes.io/service-account-token 2) Authorization(鉴权) 描述: /services/ Step 5.访问结果可以看到没有导入证书前是没有权限连接api-server的导入证书后才能与集群正常通信; WeiyiGeek.证书访问集群 实验2.创建普通用户进行对Kubernetes
通常情况下,我们自行部署 k8s 集群之后,要么使用 kubectl 命令做集群管理,要么使用 bashbroad 的 UI 管理界面来管理集群。 最近,发现了一个基于终端且比较好用的项目,可以让我们快速查看、导航、观察并解决日常我们使用 Kubernetes 中的一些问题,这就是 k9s 项目(之前的文章中有过相关的一些介绍:轻松管理 Kubernetes k9s 是一个基于 curses 的全屏终端 UI 管理工具,可以与 Kubernetes 集群进行交互,可以观察系统资源,在各种资源之间切换,检查清单、日志、监控事件并执行 Pod 等,从而确保桌面空间不至于被大量终端窗格所占据 k9s 会以特定时间间隔监控 Kubernetes 资源,默认为 2 秒,并允许查看自己集群中的内容。它可以一目了然地提供了运行中 Pod、日志和部署的可视化视图,以及对 Shell 的快速访问。 以下是该工具的主要特性: 信息触手可及 跟踪 Kubernetes 集群中运行的资源的实时活动 处理 Kubernetes 标准资源和自定义资源定义 集群指标 跟踪与 Pod,容器和节点等资源关联的实时指标
由于K8s搭建时官方提供的镜像不FQ是访问不了的,所以搭建过程中很多时间都耗费在去找镜像去了 下面是我搭建k8s集群用到的镜像 没有采用之前我用的二进制文件搭建(dns没成功),这里采用的Kubeadm 方式 https://www.kubernetes.org.cn/3808.html ? k8s-images.tar docker 镜像导入 docker load -i k8s-images.tar ingree的创建可以参考官方说明(但部分文件已不存在,请通过网盘下载):https://kubernetes.github.io hostNetwork: true containers: - name: nginx-ingress-controller image: quay.io/kubernetes-ingress-controller - --configmap=$(POD_NAMESPACE)/nginx-configuration - --annotations-prefix=nginx.ingress.kubernetes.io
什么是 K9s 首先我们得面对一个现实,Kubernetes 及其周边生态系统的运行方式正变得越来越复杂。集群管理需要大量工具加以配合。 当在集群之上进行日常运行时,和大家一样,我也需要观察自己使用的各种 Kubernetes 资源、深入了解配置、设置以及在任务没能按照预期完成时追踪问题。 除此之外,还有各类运行状态调整需要考虑…… 怎么才能解决这个令人烦恼的问题呢,今天我们就给大家推荐一款全新的 Kubernetes 集群管理工具 K9s 以通过一款简单的CLI工具来观察Kubernetes curses 的全屏终端 UI,可与您的 Kubernetes 集群进行交互。 K9s 会以特定时间间隔(默认为2秒)监控Kubernetes资源,并允许我查看自己集群中的内容。它可以一目了然地为你提供了运行中 Pod、日志和部署的可视化视图,以及对 Shell 的快速访问。
本章能创建出一个纯CA认证的集群环境,关闭了所有的非安全端口,这种方式在后续的使用中,碰到了一些问题,正在尝试安全端口和非安全端口并存的认证方式(2017年8月25日备注),成功后会修改本篇内容(已更新 但如果apiserver需要对外提供服务,或者集群中的某些容器也需要访问apiserver,以获取集群中的某些信息,更安全的做法是启用HTTPS安全机制。 DNS.2 = kubernetes.default DNS.3 = kubernetes.default.svc DNS.4 = kubernetes.default.svc.cluster.local =/etc/kubernetes/kubeconfig" 配置/etc/kubernetes/config 修改/etc/kubernetes/config,最终为 KUBE_LOGTOSTDERR=" v=0" KUBE_ALLOW_PRIV="--allow-privileged=true" KUBE_MASTER="--master=https//192.168.121.143:6443" 生成集群管理员证书
kubernetes volume支持的类型:emptyDir hostPath GCE Persistent Disk AWS Elastic Block Store NFS
Kubernetes 集群。 构建的 Kubernetes 集群中。 集群可以用于开发测试,但是它不能模拟多节点的 Kubernetes 集群。 ,Amazon EKS,腾讯云,阿里云)搭建 Kubernetes 集群。 ,我们要想办法将当前的爬虫项目部署到 Kubernetes 集群中。
,这个集群要使用 Flannel 作为容器网络方案。 但是随着集群规模的扩大,mesh模式将形成一个巨大服务网格,连接数成倍增加。 /arch":"amd64","beta.kubernetes.io/os":"linux","kubernetes.io/arch":"amd64","kubernetes.io/hostname": /arch: amd64 beta.kubernetes.io/os: linux kubernetes.io/arch: amd64 kubernetes.io/hostname 集群规模多大? 是否有维护能力? 网络策略 为什么需要网络隔离?
/cri-toolsVERSION="v1.26.0"wget https://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION /apt/sources.list.d/kubernetes.listdeb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial mainEOF /admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config其他工作节点加入集群的命令行kubeadm 9.133.33.133:6443 --token xxxx.xxxxxx \ --discovery-token-ca-cert-hash sha256:xxxxxxxx如果忘记,也可以使用个下面指令获取加入集群命令行 kubeadm token create --print-join-command安装 woker 节点加入集群(首先完成基础安装)kubeadm join 9.133.33.133:6443 --token
deployment nginx --port=88 --target-port=80 --type=NodePort #发布服务 暴露88 类型nodeport 镜像nginx kubectl get svc #查看集群 ip kubectl get svc nginx #查看集群 nginx服务 kubectl get namespce glusterfs分布式(复制模式) https://docs.gluster.org node2 persitent/Volumes 存储 pv (持久卷)抽象存储如nfs cephfs,glusterd,支持权限控制 pvc (持久卷申请)会消耗pv的资源 pod申请pvc作为卷来使用,这样集群只认
) 2 CPU 核或更多 集群中的所有机器的网络彼此均能相互连接(公网和内网都可以) 节点之中不可以有重复的主机名、MAC 地址或 product_uuid。 [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7- 要部署使用 IPv6 地址的 Kubernetes 集群, 必须指定一个 IPv6 地址,例如 --apiserver-advertise-address=fd00::101 所有节点安装之前记得先把镜像准备好 如果你希望能够在控制平面节点上调度 Pod, 例如用于开发的单机 Kubernetes 集群,请运行: kubectl taint nodes --all node-role.kubernetes.io 要将新节点添加到集群,请对每台计算机执行以下操作: SSH 到机器 成为 root (例如 sudo su -) 运行 kubeadm init 输出的命令。
一、集群部署准备 Kubernetes有三种安装方式: 1、通过yum进行安装 2、通过二进制文件进行安装 3、命令行工具kubeadm进行安装 kubeadm是Kubernetes官方提供的用于快速安装 Kubernetes集群的工具,致力于简化集群的安装过程,并解决Kubernetes集群的高可用问题。 安装 kubernetes 所需软件包: 链接:https://pan.baidu.com/s/1GoxSWAHkB3AVn9aRzGMjkQ 密码:az0o 二、部署kubernetes集群 2.1 源: # cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com kubeadm提供了upgrade命令用于对kubeadm安装的Kubernetes集群进行升级,但是开始之前需要注意,虽然kubeadm的升级不会触及工作负载,但还是要在升级之前做好备份,升级过程可能会因为
使用环境变量运行新节点,将节点加入集群 [root@h102 etcd-v2.2.4-linux-amd64]# ETCD_NAME="new-h102" ETCD_INITIAL_CLUSTER=" =http://192.168.100.102:2379 [root@h102 etcd-v2.2.4-linux-amd64]# Note: 如果要添加多个节点,建议一次只添加一个,然后检查节点和集群运行状态正常后再依次逐个添加其它节点
引言 上一篇文章,我们介绍和对比了 Docker Swarm 和 Kubernetes: 容器集群管理 -- Docker Swarm vs Kubernetes 那么,功能强大却又看起来如此复杂的 整个集群的持久化数据,则由 kube-apiserver 处理后保存在 etcd 中。 2.2 Node 节点 Node 节点即 Kubernetes 的计算节点。 我们只需要执行下面两个命令就可以部署一个 Kubernetes 集群: $ kubeadm init # 创建一个 Master 节点。 接下来,我们就可以执行下面的命令创建集群了: $ sudo kubeadm init 4.2.3 拷贝配置 如果你是在当前机器上第一次启动 kubernetes 集群,你需要按照屏幕上显示的提示执行: Kubernetes 集群中部署应用了。
之前我们在windows机器上用Minikube安装了一个单节点Kubernetes集群,这个只能当做了解k8s的练手,本篇文章我们安装一个拥有一个Master,两个Worker节点的k8s集群,作为熟悉 Kubernetes的测试集群。 [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86 .CNhY-pX7Ao4kLu3xnrtyzlpR-DXnfDW3-FjC4bs9q1HPGxU-SLWsMK9X-EL0Qo1Abu-djDU0XFOWi6TNEDBcstk72wB3rGVu5VP8hh1w4Efc2NuqUPM4U2i3ZgIsagcHS9kbx3EIGvqNHINc-HETo9J6Mak18o5RTgaUGp7GQQuO-GoD9te4r1u-db5BsFN2NGz6frsVreb1PpN_gzjkK5dAcMFf9k838aMg0yiUw0hFV3q54 http://任意一个Worker节点的IP地址:32567/ 输入前一步骤中获得的 token,可进入Kuboard 集群概览页面 ?
172.16.56.133:6443 --token b19ftk.uc7t11gdkou56kdj \ --discovery-token-ca-cert-hash sha256:a57125da9f1180ee1ce322cf04d28503be59746135aca20c1a97ca6aaa5a86d6 上述内容主要是Worker Node加入集群的时候使用。 172.16.56.133:6443 --token b19ftk.uc7t11gdkou56kdj \ --discovery-token-ca-cert-hash sha256:a57125da9f1180ee1ce322cf04d28503be59746135aca20c1a97ca6aaa5a86d6 集群就搭建完成了,一个崭新的Kubernetes集群就映入眼帘。 本期Kubernetes集群搭建就到这。
部署Etcd集群 Etcd 是一个分布式键值存储系统,Kubernetes使用Etcd进行数据存储,所以先准备一个Etcd数据库,为解决Etcd单点故障,应采用集群方式部署,这里使用3台组建集群,可容忍 1台机器故障,当然,你也可以使用5台组建集群,可容忍2台机器故障。 注:为了节省机器,这里与K8s节点机器复用,也可以独立于k8s集群之外部署,只要apiserver能连接到就行。 :集群通告地址 ETCD_ADVERTISE_CLIENT_URLS:客户端通告地址 ETCD_INITIAL_CLUSTER:集群节点地址 ETCD_INITIAL_CLUSTER_TOKEN:集群Token ETCD_INITIAL_CLUSTER_STATE:加入集群的当前状态,new是新集群,existing表示加入已有集群 在k8s-master1节点执行---创建etcd服务,systemd管理etcd
我们现在有这样一个需求,就是集群中多台服务的配置是不一致的。这就导致资源分配并不是均匀的,比如我们需要有些服务节点用来运行计算密集型的服务,而有些服务节点来运行需要大量内存的服务。 Scheduler 是 kubernetes 的调度器,主要的任务是把定义的 Pod 分配到集群的节点上。 听起来非常简单,但有很多要考虑的问题: 公平 如何保证每个节点都能被分配资源 资源高效利用 集群所有资源最大化被使用 效率 调度的性能要好,能够尽快地对大批量的 Pod 完成调度工作 灵活 允许用户根据自己的需求控制调度的逻辑 3d v1.19.4 kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node2,kubernetes.io/os=linux k8s-master k8s-master,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master
kubeadm配置的集群默认的证书是1年,到期后证书升级是个很麻烦的事情。 ,该脚本可将kubeadm生成的证书有效期更新为10年 该脚本用于处理已过期或者即将过期的kubernetes集群证书 该脚本只处理master节点上的证书:kubeadm默认配置了kubelet证书自动更新 etcd默认是不使用TLS连接,没有etcd相关证书,只需要更新master证书即可 大于等于v1.10版本,etcd默认开启TLS,需要更新etcd证书和master证书 该脚本适用于所有k8s版本集群证书更新 证书更新失败回滚 脚本会自动备份/etc/kubernetes目录到/etc/kubernetes.old-$(date +%Y%m%d)目录(备份目录名录示例:kubernetes.old-20200325 var/lib/kubelet/pki/kubelet-client-current.pem 下一篇: KubeSphere3.0启用k8s多集群
可以使用Kubernetes的Service资源来定义一个Kafka服务,如下所示: apiVersion: v1 kind: Service metadata: name: kafka labels Kubernetes会将所有传入的数据流量路由到Kafka服务的Pod上。 步骤2:创建Kafka集群 接下来,我们需要使用Kubernetes的Deployment资源来定义Kafka集群。 步骤4:创建Zookeeper集群 接下来,我们需要创建一个Zookeeper集群来支持Kafka集群。我们可以使用Kubernetes的StatefulSet资源来定义Zookeeper集群。 步骤5:测试Kafka集群 现在,我们已经成功地在Kubernetes上部署了一个Kafka集群。为了测试集群是否正常工作,我们可以创建一个Kafka生产者和一个Kafka消费者来测试集群。 步骤6:清理资源 完成测试后,我们可以删除Kafka集群和Zookeeper集群的资源。