S2-012 遠端程式碼執行漏洞
Master本身也要安裝docker的容器,所以既作為master,也作為node
更改主機名
hostnamectl set-hostname server1
hostnamectl set-hostname server2
hostnamectl set-hostname server3
bash
Master安裝服務 etcd api-server controlor-manager scheduler kubelet kube-proxy
- 主機名和防火牆配置
三臺相同
[root@server1 ~]# iptables -F
[root@server1 ~]# iptables-save
[root@server1 ~]# systemctl stop firewalld.service && systemctl disable firewalld.service
server1
[root@server1 ~]# vim /etc/hosts 主機解析
192.168.1.10 server1
192.168.1.20 server2
192.168.1.30 server3
- 上傳公鑰
ssh-keygen #獲取公鑰
ssh-copy-id -i root@server2 #公鑰上傳
ssh-copy-id -i root@server3
-i:指定公鑰檔案把本地的ssh公鑰檔案安裝到遠端主機對應的賬戶下
- server1安裝etcd服務
yum -y install etcd
- 配置etcd
vim /etc/etcd/etcd.conf
ETCD_DATA_DIR="/var/lib/etcd/default.etcd" #資料存放在那個目錄
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379" #監聽的一個地址,0.0.0.0表示所有的,本地訪問的話是127.0.0.1
ETCD_NAME="default" #節點名字,配置叢集的話這裡的名字必須不一樣
TCD_ADVERTISE_CLIENT_URLS="http://192.168.1.10:2379" #
啟動etcd
systemctl start etcd #啟動etcd
systemctl enable etcd #設定開機自啟
netstat -lutup #檢視埠,起來的話就監聽,
-l:顯示監控中的伺服器的網路
-u:顯示udp傳輸協議的連線情況
-tup:顯示tcp的傳輸協議的連線情況
由於我們設定的,所以監聽的是本機的2380和任務網段的2379,2379是對外提供服務使用的,往etcd寫資料就使用這個埠,etcd叢集之間相互同步用的2380
- 安裝master節點
yum -y install kubernetes-master.x86_64
- 從之前我們知道了,master上有4個服務,所以我們需要去配置一下
vim /etc/kubernetes/apiserver
首先配置api-server
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0" #預設是127.0.0.1,我們要想用客戶端訪問就需要0.0.0.0
開啟api-server的埠
KUBE_API_PORT="--port=8080"
配置minions,節點的埠
KUBELET_PORT="--kubelet-port=10250"
連線etce
KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.1.10:2379"
- 配置controller-manager和scheduler的配置檔案
vim /etc/kubernetes/config
KUBE_MASTER="--master=http://192.168.1.10:8080" #是controller-manager, scheduler, 和 proxy 來找到api-server的地址,api-server在哪臺主機,哪臺就是master
- 啟動服務
首先啟動api-server
systemctl start kube-apiserver.service
啟動controller-manager
systemctl start kube-controller-manager.service
啟動scheduler
systemctl start kube-scheduler.service
- 設定開機自動載入,防止自動關閉
systemctl enable kube-apiserver.service
systemctl enable kube-scheduler.service
systemctl enable kube-controller-manager.service
- 檢視狀態
kubectl get componentstatus
Node節點安裝
- 安裝node節點,安裝的時候會預設幫我們安裝上docker,都安裝
yum -y install kubernetes-node.x86_64
- 先在master配置node服務
vim /etc/kubernetes/config #master之前配置過,所以不需要配置
vim /etc/kubernetes/kubelet #配置kubelet配置檔案
KUBELET_ADDRESS="--address=192.168.1.10" #配置kubelet的監聽地址
UBELET_PORT="--port=10250" #埠10250
KUBELET_HOSTNAME="--hostname-override=server1" #當我們有多個節點的時候,每個節點都需要給他新增上一個標籤,這樣master命令的時候就只要一個節點回應,可以用ip地址來區別,也可以用不同主機名來區分
KUBELET_API_SERVER="--api-servers=http://192.168.1.10:8080" #連線api-server
- 啟動kubelet服務,啟動kubelet自動啟動docker
systemctl status docker
systemctl start kubelet.service #啟動kubelet
systemctl status docker #發現啟動docker服務
systemctl enable kubelet.service #設定kubelet開機自啟
systemctl start kube-proxy.service #啟動proxy服務
systemctl enable kube-proxy.service #開機自啟
kubectl get nodes #檢視註冊節點,啟動kubelet的時候,就自動註冊進來了
- server2上修改配置檔案
vim /etc/kubernetes/config
KUBE_MASTER="--master=http://192.168.1.10:8080" #主要是給kube-proxy用的
- 繼續修改server2另一個配置檔案
vim /etc/kubernetes/kubelet
KUBELET_ADDRESS="--address=192.168.1.20" #本機的IP
KUBELET_PORT="--port=10250" #開啟10250監聽埠
KUBELET_HOSTNAME="--hostname-override=server2" #修改主機標籤
UBELET_API_SERVER="--api-servers=http://192.168.1.10:8080" #指定api-server的地址
- 開啟服務
systemctl start kubelet.service #開啟kubelet服務
systemctl enable kubelet.service #設定開機自啟
systemctl start kube-proxy.service #開啟kube-proxy服務
systemctl enable kube-proxy.service #設定開機自啟
- master節點檢視
kubectl get nodes #檢視node節點