写在前面:代码审计太难了,不想学了摆烂了,开始学云安全了。。。。
一.云介绍
云分类:公有云、私有云、混合云
云有三种服务模式:Laas、Paas 和 Saas
Laas:基础设施即服务(Infrastructure-as-a-Service),拥有了IaaS,就可以将引荐外包到别的地方去。IaaS公司会提供场外服务器,存储和网络硬件,也可以选择租用。节省了维护成本和办公场地,公司可以在任何时候利用这些硬件来运行其应用。目前比较知名的IaaS公司有亚马逊、Bluelock、CSC、GoGrid、IBM等。
Paas:平台即服务(Platform-as-a-Service),某些时候也被叫作中间件。所有的开发都可以在这一层进行,节省时间与资源。PaaS公司可以提供各种开发和分发应用的解决方案,比如虚拟服务器和操作系统等,可以节省硬件上的费用。PaaS公司与IaaS公司有许多重叠,除了上面列出的那些之外,还有Google、Microsoft Azure、,Heroku、Engine Yard等。
Saas:软件即服务(Software-as-a-Service),也是我们目前普通用户接触最多的层面,在网络上任意一个远程服务器上的应用都是属于SaaS。比如现在阿里的钉钉、JIBUU以及苹果的iCloud都属于这一类。比较知名的SaaS公司有Salesforce、workday、Slack等。
我所接触的暂时是私有云,所以暂时的学习路线就是先学习一些基础知识,然后学习公有云如阿里云和腾讯云,最后进一步再学习微软的Azure及亚马逊的AWS,谷歌的Google Cloud。
二.Kubernetes基本介绍
Kubernetes(也称 k8s 或 “kube”)是一 个开源的容器编排平台,可以自动完成在部署、管理和扩展容器化应用过程中涉及的许多手动操作。
- Node:节点节点上的组件包括 kublet、 容器运行时以及 kube-proxy。
1. Pod:包装一个容器或多个容器。一个 pod 应该只包含一个应用程序(通常,一个 pod 只运行 1 个容器)。Pod 是 kubernetes 抽象出容器技术运行的方式。
2.Service:每个 pod 都有 1 个来自节点内部范围的内部IP 地址。但是,它也可以通过服务公开。该服务还有一个 IP 地址,它的目标是保持 pod 之间的通信,因此如果一个 pod 挂掉,新的替代品(具有不同的内部 IP)将可以访问暴露在服务的同一 IP 中。它可以配置为内部或外部。当 2 个 pod 连接到同一个服务时,该服务还充当负载均衡器。
- Kubelet :主节点代理。在节点和 kubectl 之间建立通信的组件,并且只能运行 pod(通过 API 服务器)。kubelet 不管理不是由 Kubernetes 创建的容器。
- Kube-proxy :是负责 apiserver 和节点之间通信(服务)的服务。基础是节点的 IPtables。大多数有经验的用户可以安装其他供应商的其他 kube-proxies。
- Sidecar 容器:Sidecar 容器是应该与 Pod 中的主容器一起运行的容器。这种边车模式扩展并增强了当前容器的功能,而无需更改它们。如今,我们知道我们使用容器技术来包装应用程序在任何地方运行的所有依赖项。一个容器只做一件事,而且做得很好。
- Api Server:是用户和 Pod 用来与主进程通信的方式。只应允许经过身份验证的请求。
- Scheduler:调度器,调度是指确保 Pod 与节点匹配,以便 Kubelet 可以运行它们。它有足够的智能来决定哪个节点有更多的可用资源,并将新的 pod 分配给它。请注意,调度程序不会启动新的 pod,它只是与节点内运行的 Kubelet 进程通信,这将启动新的 pod。
- Kube Controller manager :它检查副本集或部署等资源,以检查是否有正确数量的 pod 或节点正在运行。如果 pod 丢失,它将与调度程序通信以启动一个新的 pod。它控制 API 的复制、令牌和帐户服务。
- etcd :数据存储,持久化、一致化、分布式。是 Kubernetes 的数据库和键值存储,它保存集群的完整状态(每个更改都记录在这里)。Scheduler 或 Controller 管理器等组件依赖于此日期来了解发生了哪些更改(节点的可用资源、运行的 pod 数量...)
- Volumes:当一个 pod 创建的数据不应该在 pod 消失时丢失,它应该存储在一个物理卷中。Kubernetes 允许将卷附加到 pod 以持久保存数据。该卷可以在本地机器或远程存储中。如果您在不同的物理节点中运行 pod,您应该使用远程存储,以便所有 pod 都可以访问它。
- ConfigMap:配置URL来访问服务。Pod 将从这里获取数据以了解如何与其余服务(Pod)进行通信。请注意,这不是保存凭据的推荐位置!
- Secret :这是存储秘密数据的地方,如密码、API 密钥……以 Base64 编码。Pod 将能够访问此数据以使用所需的凭据。
- Deployments :这是指示 kubernetes 运行的组件的地方。用户通常不会直接使用 Pod,Pod 在ReplicaSets中被抽象化(复制的相同 Pod 的数量),它们通过部署运行。请注意,部署适用于无状态应用程序。部署的最低配置是要运行的名称和镜像。
- StatefulSet :该组件专门用于需要访问相同存储的数据库等应用程序。
- Ingress :这是用于通过 URL 公开应用程序的配置。请注意,这也可以使用外部服务来完成,但这是公开应用程序的正确方法。
三.搭建Kubernetes
工具介绍:
-
kubeadm
:用来初始化集群的指令。 -
kubelet
:在集群中的每个节点上用来启动 Pod 和容器等。 -
kubectl
:用来与集群通信的命令行工具。 -
kind:是一个使用 Docker 容器“节点”运行本地 Kubernetes 集群的工具
3.1 使用kubeadm等工具搭建
使用的环境是Ubuntu 18.04
#安装工具
apt install kubeadm kubectl kubelet -y
#使用kubeadm 安装k8s
kubeadm init
#设置admin用户使用kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
运行命令查看
#查看运行的pod
kubectl get pods
只要运行上述命令有输出证明搭建完成!!
Ps:我这里是创建了一个pod
3.2 使用kind搭建
安装kind
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.11.0/kind-linux-amd64
chmod +x ./kind
mv ./kind /usr/local/bin/kind
安装go环境
# 从官⽹https://golang.org/dl/ 下载
wget https://dl.google.com/go/go1.13.linux-amd64.tar.gz
# 解压到指定⽬录/usr/local
tar zxvf go1.13.1.linux-amd64.tar.gz -C /usr/local
# 配置环境变量
vim /etc/profile
在最后添加
export PATH=$PATH:/usr/local/go/bin
保存⽂件,并将新的PATH环境变量加载到当前的shell会话中:
source ~/.profile
新建一个集群
#创建一个名称为k8s的集群
kind create cluster --name k8s
#创建完成后可以通过查看集群
kind get clusters
创建成功如下:
3.3 新建一个pod
当我们创建成功一个集群后,就可以使用kubectl进行集群管理了。
使用参考:命令行工具 (kubectl) | Kubernetes
#使用docker拉取nginx镜像
docker pull nginx
#在1112端口创建一个nginx服务
kubectl run nginx-test --image=nginx --port=1112
#查看pods,加上-o wide 参数会输出更多内容
kubectl get pods -o wide
输出如下
总结:本文主要介绍了云安全及相关内容的基础知识,然后提供两种搭建集群的简易方法,最后尝试新建一个pod作为初次入门学习。
下篇文章主要学习使用配置文件新建一个pod,以及学习kubernetes中比较重要的组件相关功能有助理解。
参考资料:
Kubernetes Basics - HackTricks Cloud
Kubernetes 文档 | Kubernetes