玩转容器安全一 - 虚拟机搭建简易版K8s集群

在虚拟机折腾K8s

# Date 2020/11/19
# Operation System: Centos7
# Docker Version: 19.03.13
# Kubernetes Version: 1.19.0

# k8s-master:10.10.10.100
# k8s-node1:10.10.10.101
# k8s-node2:10.10.10.102

虚拟机系统初始化(Master与Node均需执行)

  • 配置网络与主机信任
vim /etc/hosts

10.10.10.100    k8s-master
10.10.10.101    k8s-node1
10.10.10.102    k8s-node2
  • 关闭交换分区
# 临时关闭
swapoff -a

# 永久关闭,编辑/etc/fstab文件注释swap
  • 关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
  • 安装docker软件
yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install docker-ce.x86_64 docker-ce-cli.x86_64 -y

# 配置docker开机启动并启动docker服务
systemctl enable docker.service
systemctl start docker.service
  • 配置docker加速
vim /etc/docker/daemon.json

{
  "registry-mirrors": ["https://bdf5zlvt.mirror.aliyuncs.com"]
}

systemctl daemon-reload
systemctl restart docker.service

安装Kubernetes(Master与Node均需执行)

# 配置yum源
vim /etc/yum.repos.d/kubernetes.repo

[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

yum install kubelet-1.19.0 kubeadm-1.19.0 kubectl-1.19.0 -y

systemctl enable kubelet.service
systemctl start kubelet.service

# kubectl命令自动补齐
echo "source <(kubectl completion bash)" >> ~/.bash_profile
source ~/.bash_profile 
  • 下载镜像
# 查看待下载的镜像
kubeadm config images list --kubernetes-version=1.19.0

# 为了方便,写一个脚本来执行
vim get_image.sh
bash get_image.sh
#!/bin/bash

# 使用阿里云镜像来下载
new_registry=registry.cn-hangzhou.aliyuncs.com/google_containers
old_registry=k8s.gcr.io

# arr的值是使用上述命令得到的,这里也可以用命令
arr=(kube-apiserver:v1.19.0 kube-controller-manager:v1.19.0 kube-scheduler:v1.19.0 kube-proxy:v1.19.0 pause:3.2 etcd:3.4.9-1 coredns:1.7.0)
# arr=(`kubeadm config images list --kubernetes-version=1.19.0 | awk -F '/' '{print $2}'`)
for var in ${arr[@]}
do
  docker pull $new_registry/$var
  docker tag $new_registry/$var $old_registry/$var
done
# 查看镜像
docker image ls -a

玩转容器安全一 - 虚拟机搭建简易版K8s集群_第1张图片

配置Kubernetes Master(仅在Master节点执行)

kubeadm init --apiserver-advertise-address 10.10.10.100 --pod-network-cidr=10.20.0.0/16 --kubernetes-version 1.19.0

# 一定要记住这里的输出
# kubeadm join 10.10.10.100:6443 --token x69j0h.spr9aisuox02xcbj --discovery-token-ca-cert-hash sha256:9291f5085dad5b23caf982a8faf042aa4331d956039c36438f02f0ffb34b7f44

# 配置环境变量
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile 

Kube-Flannel网络配置

curl https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml -o kube-flannel.yml
kubectl apply -f kube-flannel.yml

Kube-Dashboard配置

curl https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.4/aio/deploy/recommended.yaml -o recommended.yaml

vim recommended.yaml

# 官方部署Dashboard的服务没使用NodePort,将yaml文件下载到本地,在Service里添加NodePort
---

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  type: NodePort # 此行为新增
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30000 # 此行为新增
  selector:
    k8s-app: kubernetes-dashboard

---
# 当我们直接这样部署后
kubectl apply -f recommended.yaml

# 查看端口信息
netstat -tulnp

玩转容器安全一 - 虚拟机搭建简易版K8s集群_第2张图片

# 使用浏览器进行访问

# 这个时候需要Token才可以认证,使用如下命令即可获取Token,注意最后一个参数根据实际为准
kubectl describe secret -n kubernetes-dashboard kubernetes-dashboard-token-72krn

玩转容器安全一 - 虚拟机搭建简易版K8s集群_第3张图片

# 注意右上角的报错,我查了很多资料说法很多,但是其实解决没有那么复杂,什么配置权限都不用

# 修改配置文件,注释apiiGroups,resources与verbs重新进行配置,生产不要这么搞哟!
vim recommended.yaml
---

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
rules:
  # Allow Metrics Scraper to get metrics from the Metrics server
  # - apiGroups: ["metrics.k8s.io"]
  - apiGroups: ["*"]
    # resources: ["pods", "nodes"]
    resources: ["*"]
    # verbs: ["get", "list", "watch"]
    verbs: ["*"]

---
# 重新部署一下,并再次访问
kubectl apply -f recommended.yaml

# 同时需要注意,使用的Token应该是namespace为kubernetes-dashboard的Token

玩转容器安全一 - 虚拟机搭建简易版K8s集群_第4张图片

配置Kubernetes Node(仅在Node节点执行)

# 将Node1 和 Node2 加入集群
kubeadm join 10.10.10.100:6443 --token x69j0h.spr9aisuox02xcbj --discovery-token-ca-cert-hash sha256:9291f5085dad5b23caf982a8faf042aa4331d956039c36438f02f0ffb34b7f44

玩转容器安全一 - 虚拟机搭建简易版K8s集群_第5张图片

玩转Kubernetes命令

# 在master查看Nodes
kubectl get nodes/kubectl get node

# 查看所有命名空间
kubectl get pod --all-namespaces

# 查看Secret信息
kubectl get secret

# 查看某个namespace的Secret信息
kubectl get secret -n kubernetes-dashboard

# 获取Token内容
kubectl describe secret -n kubernetes-dashboard kubernetes-dashboard-token-72krn

# 查看Pod信息
kubectl get pod/kubectl get pods

# 查看某个namespace的Pod信息
kubectl get pod -n kubernetes-dashboard

# 获取更详细的pod信息
kubectl get pod -n kubernetes-dashboard -o wide

# 允许master节点可以被任务调度安装pod
kubectl taint node k8s-master node-role.kubernetes.io/master-

# 不允许master节点可以被任务调度安装pod
kubectl taint node k8s-master node-role.kubernetes.io/master=""

# 查看副本数
kubectl get deployment -n kubernetes-dashboard

# 查看副本详细信息
kubectl describe deployments

# 查看服务
kubectl get services/kubectl get service

玩转容器安全一 - 虚拟机搭建简易版K8s集群_第6张图片玩转容器安全一 - 虚拟机搭建简易版K8s集群_第7张图片
未完待续…………

你可能感兴趣的:(基础知识,容器,kubernetes,安全,网络安全,云安全)