參見(jiàn):https://www.cnblogs.com/syuee/p/15057847.html
1、集群安裝
一颊埃、 主機(jī)準(zhǔn)備
1、設(shè)置主機(jī)名以及host文件的相互解析:?
hostnamectl set-hostname k8s-master01? ?
vi /etc/hosts? ? ? ? 192.168.66.10? k8s-master01? (在大型環(huán)境建議通過(guò)DNS的方式俯在,讓主機(jī)名和ip能夠相互解析)
2竟秫、安裝必要的依賴包
yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git
3、設(shè)置防火墻為Iptables并設(shè)置空規(guī)則?
iptables 是一個(gè)功能強(qiáng)大的網(wǎng)絡(luò)包過(guò)濾和轉(zhuǎn)發(fā)工具跷乐,它可以幫助管理員配置和管理系統(tǒng)的網(wǎng)絡(luò)安全策略肥败,實(shí)現(xiàn)防火墻、網(wǎng)絡(luò)地址轉(zhuǎn)換和數(shù)據(jù)包修改等功能愕提。通過(guò)合理配置 iptables 規(guī)則馒稍,可以增強(qiáng)系統(tǒng)的網(wǎng)絡(luò)安全性和靈活性。
systemctl stop firewalld && systemctl disable firewalld
yum -y install ipatbles-service && systemctl start iptables && systemctl enable ipatbles && ipatbles -f && service ipatables save
(安裝 iptables 服務(wù)浅侨,啟動(dòng)該服務(wù)纽谒。并設(shè)置 iptables 服務(wù)在系統(tǒng)啟動(dòng)時(shí)自動(dòng)啟動(dòng)。最后如输,它會(huì)刷新規(guī)則鼓黔、保存配置)
4、關(guān)閉SELINUX
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab? ? ?
(禁用系統(tǒng)上的所有 Swap 分區(qū)不见。在?/etc/fstab?文件中找到包含關(guān)鍵字 "swap" 的行澳化,并將其替換為以 "#" 開(kāi)頭的注釋行。)
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config?
(這個(gè)命令用于將 SELinux 安全模塊設(shè)置為 "Permissive" 模式稳吮。SELinux 是一種強(qiáng)制訪問(wèn)控制(MAC)機(jī)制缎谷,用于加強(qiáng) Linux 系統(tǒng)的安全性。通過(guò)將 SELinux 設(shè)置為 "Permissive" 模式灶似,系統(tǒng)仍然會(huì)記錄違規(guī)行為列林,但不會(huì)阻止它們。這樣可以臨時(shí)禁用 SELinux 的強(qiáng)制訪問(wèn)控制酪惭,以便進(jìn)行一些需要臨時(shí)關(guān)閉 SELinux 的操作希痴。將?/etc/selinux/config?文件中的?SELINUX?參數(shù)的值修改為 "disabled",從而永久禁用 SELinux撞蚕。)??
5润梯、調(diào)整內(nèi)核參數(shù),對(duì)于k8s
cat > kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1 #開(kāi)啟網(wǎng)橋模式
net.bridge.bridge-nf-call-ip6tables=1 #開(kāi)啟網(wǎng)橋模式
net.ipv4.ip_forward=1 #設(shè)置包轉(zhuǎn)發(fā)
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0 # 禁止使用 swap 空間,只有當(dāng)系統(tǒng) OOM 時(shí)才允許使用它
vm.overcommit_memory=1 # 不檢查物理內(nèi)存是否夠用
vm.panic_on_oom=0 # 開(kāi)啟 OOM
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1 #關(guān)閉IPV6協(xié)議
net.netfilter.nf_conntrack_max=2310720
EOF
cp kubernetes.conf /etc/sysctl.d/kubernetes.conf
sysctl -p /etc/sysctl.d/kubernetes.conf? ? 手動(dòng)刷新生效
6纺铭、調(diào)整系統(tǒng)時(shí)區(qū)
# 設(shè)置系統(tǒng)時(shí)區(qū)為 中國(guó)/上海
timedatectl set-timezone Asia/Shanghai
# 將當(dāng)前的 UTC 時(shí)間寫(xiě)入硬件時(shí)鐘
timedatectl set-local-rtc 0
# 重啟依賴于系統(tǒng)時(shí)間的服務(wù)
systemctl restart rsyslog
systemctl restart crond
7寇钉、關(guān)閉系統(tǒng)不需要服務(wù)
Postfix 是一個(gè)郵件傳輸代理(MTA),它用于發(fā)送、接收和路由電子郵件。
systemctl stop postfix && systemctl disable postfix
8坟漱、設(shè)置 rsyslogd 和 systemd journald
rsyslogd?和?systemd journald?是兩種不同的日志管理系統(tǒng),用于收集撵溃、存儲(chǔ)和管理系統(tǒng)日志。主要區(qū)別:
rsyslogd?是傳統(tǒng)的 syslog 系統(tǒng)锥累,而?systemd journald?是 systemd 系統(tǒng)的一部分缘挑。
rsyslogd?使用文本文件存儲(chǔ)日志,而?systemd journald?使用二進(jìn)制格式存儲(chǔ)日志桶略。
rsyslogd?支持更廣泛的日志轉(zhuǎn)發(fā)和處理選項(xiàng)语淘,而?systemd journald?提供了更強(qiáng)大的查詢和過(guò)濾功能。
rsyslogd?可以與其他日志處理工具集成际歼,而?systemd journald?是 systemd 系統(tǒng)的默認(rèn)日志管理工具惶翻。
mkdir /var/log/journal # 持久化保存日志的目錄
mkdir /etc/systemd/journald.conf.d
cat > /etc/systemd/journald.conf.d/99-prophet.conf <<EOF
[Journal]
# 持久化保存到磁盤
Storage=persistent
# 壓縮歷史日志
Compress=yes
SyncIntervalSec=5m
RateLimitInterval=30s
RateLimitBurst=1000
# 最大占用空間 10G
SystemMaxUse=10G
# 單日志文件最大 200M
SystemMaxFileSize=200M
# 日志保存時(shí)間 2 周
MaxRetentionSec=2week
# 不將日志轉(zhuǎn)發(fā)到 syslog
ForwardToSyslog=no
EOF
systemctl restart systemd-journald
9、升級(jí)系統(tǒng)內(nèi)核為4.44
CentOS 7.x 系統(tǒng)自帶的 3.10.x 內(nèi)核存在一些 Bugs鹅心,導(dǎo)致運(yùn)行的 Docker吕粗、Kubernetes 不穩(wěn)定,例如: rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
# 安裝完成后檢查 /boot/grub2/grub.cfg 中對(duì)應(yīng)內(nèi)核 menuentry 中是否包含 initrd16 配置旭愧,如果沒(méi)有颅筋,再安裝 一次!
yum --enablerepo=elrepo-kernel install -y kernel-lt
# 設(shè)置開(kāi)機(jī)從新內(nèi)核啟動(dòng)
grub2-set-default 'CentOS Linux (4.4.189-1.el7.elrepo.x86_64) 7 (Core)'
grub2-set-default 'CentOS Linux (4.4.218-1.el7.elrepo.x86_64) 7 (Core)'
grub2-set-default 'CentOS Linux (4.4.219-1.el7.elrepo.x86_64) 7 (Core)'
查看所有可用內(nèi)核
awk -F \' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
grub2-set-default 'CentOS Linux (4.4.248-1.el7.elrepo.x86_64) 7 (Core)'
二、 kube-proxy 開(kāi)啟ipvs的前置條件
modprobe br_netfilter
cat > /etc/sysconfig/modules/ipvs.modules << EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
(modprobe -- ip_vs:這個(gè)命令用于加載名為?ip_vs?的內(nèi)核模塊输枯。ip_vs?模塊是 Linux 內(nèi)核中的一個(gè)模塊垃沦,提供了 IP 虛擬服務(wù)器(IPVS)的功能,用于實(shí)現(xiàn)負(fù)載均衡和集群服務(wù)用押。
modprobe -- ip_vs_rr、modprobe -- ip_vs_wrr靶剑、modprobe -- ip_vs_sh:這些命令用于加載與 IPVS 相關(guān)的調(diào)度器模塊蜻拨。ip_vs_rr?是基于輪詢的調(diào)度器,ip_vs_wrr?是基于加權(quán)輪詢的調(diào)度器桩引,ip_vs_sh?是基于散列的調(diào)度器缎讼。這些調(diào)度器用于決定負(fù)載均衡時(shí)數(shù)據(jù)包的路由方式。
modprobe -- nf_conntrack_ipv4:這個(gè)命令用于加載名為?nf_conntrack_ipv4?的內(nèi)核模塊坑匠。nf_conntrack_ipv4?模塊是 Linux 內(nèi)核中的一個(gè)模塊血崭,提供了 IPv4 連接跟蹤的功能,用于跟蹤和管理網(wǎng)絡(luò)連接狀態(tài)。)
chmod 755 /etc/sysconfig/modules/ipvs.modules && \bash /etc/sysconfig/modules/ipvs.modules &&\lsmod | grep -e ip_vs -e nf_conntrack_ipv4
(加載和配置一些 IPVS 相關(guān)的內(nèi)核模塊 夹纫。使用?lsmod?命令列出當(dāng)前加載的內(nèi)核模塊咽瓷,并通過(guò)?grep?命令進(jìn)行過(guò)濾,只顯示包含?ip_vs?或?nf_conntrack_ipv4?的模塊信息舰讹。)
三茅姜、 安裝docker軟件
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager \
--add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum update -y && yum install -y docker-ce? ?##先更新系統(tǒng)中已安裝的軟件包到最新版本,然后安裝 Docker 社區(qū)版月匣。
此時(shí)k8s的版本可能已經(jīng)更改钻洒,uname -r 查看是否之前設(shè)置的4.44,如果不是锄开,重新設(shè)置默認(rèn)版本素标,再重啟。grub2-set-default 'CentOS Linux (4.4.189-1.el7.elrepo.x86_64) 7 (Core)'??&& reboot?
systemctl start docker? ##重啟docker
systemctl enable docker ##設(shè)置開(kāi)機(jī)自啟
mkdir /etc/docker??## 創(chuàng)建 /etc/docker 目錄
# 配置 daemon.
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],???##?指定了 Docker 守護(hù)進(jìn)程使用?systemd?作為 cgroup 驅(qū)動(dòng)程序萍悴,用于管理容器的資源限制和隔離头遭。?
"log-driver": "json-file",? ???##指定了 Docker 容器的日志驅(qū)動(dòng)程序?yàn)?json-file,即將容器的日志輸出到文件中退腥。
"log-opts": {
"max-size": "100m"
}
}
EOF
mkdir -p /etc/systemd/system/docker.service.d
# 重啟docker服務(wù)
systemctl daemon-reload && systemctl restart docker && systemctl enable docker
四任岸、 安裝kubeadm(主從配置)
kubeadm是?Kubernetes 官方提供的一個(gè)命令行工具,用于在 Kubernetes 集群中初始化控制平面節(jié)點(diǎn)(Master 節(jié)點(diǎn))和加入工作節(jié)點(diǎn)(Worker 節(jié)點(diǎn))狡刘。
cat <<EOF > /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
EOF
yum -y install kubeadm-1.15.1 kubectl-1.15.1 kubelet-1.15.1
systemctl enable kubelet.service
五享潜、 初始化主節(jié)點(diǎn)?
注意,此處可以先導(dǎo)入下載好的kubeadm?鏡像(谷歌下載)
初始化 Kubernetes 集群嗅蔬,并根據(jù)指定的配置文件生成秘鑰
kubeadm config print init-defaults > kubeadm-config.yaml
#更改kubeadm-config.yaml 文件
localAPIEndpoint:
advertiseAddress: 192.168.66.10 #更改為master的ip地址
kubernetesVersion: v1.15.1 #更改版本為當(dāng)前版本
networking:
? podSubnet: "10.244.0.0/16" #添加flannel 網(wǎng)絡(luò)不然后面麻煩
? serviceSubnet: 10.96.0.0/12
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
featureGates:
? SupportIPVSProxyMode: true
mode: ipvs
做初始化并生成秘鑰
kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs | tee kubeadm-init.log
六剑按、查看kubeadm-init.log \加入主節(jié)點(diǎn)以及其余工作節(jié)點(diǎn)
vim??kubeadm-init.log (如果第5步前,沒(méi)有導(dǎo)入鏡像澜术,通過(guò)下載方式獲取鏡像艺蝴,時(shí)間會(huì)比較久。防止卡主鸟废,可以開(kāi)個(gè)子終端猜敢,通過(guò)docker images 查看鏡像是否有新增)
通過(guò)觀察日志,發(fā)現(xiàn)需要做以下操作:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf???$HOME/.kube/config
sudo chown $(id -u):?$(id -g)?$HOME/.kube/config
此時(shí)可以查看當(dāng)前節(jié)點(diǎn):kubectl get node
七盒延、 部署網(wǎng)絡(luò)缩擂,安裝flannel
mkdir install-k8s
ls
mv?kubeadm-init.log?kubeadm-config.ymal install-k8s/
cd??install-k8s
mkdir core
mv *core/
mkdir plugin
cd plugin/
mkdir flannel
cd??flannel
wget?https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube- flannel.yml
kubectl?create -f??kube- flannel.yaml
kubectl get pod -n kube-system
備注:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube- flannel.yml
kubectl apply -f 是在原有基礎(chǔ)上升級(jí)
kubectl create -f 是直接新建
八、 加入其他節(jié)點(diǎn)
加入其他節(jié)點(diǎn)(在子節(jié)點(diǎn)執(zhí)行 )(在主節(jié)點(diǎn)的日志文件里面找到命令):
kubeadmjoin192.168.66.10:6443--token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:ed81ab06be57fa61df388ddce02b4a6d70d0e6a0be91b7b7382d8fd82970c964
kubectl get pod -n kube-system -o wide
kubectl get pod -n kube-system -w
mv install-k8s/ /usr/local/?
rm -rf? *?install-k8s
2添寺、配置私有倉(cāng)庫(kù)Harbor
Harbor 提供了一個(gè)安全胯盯、可靠的容器鏡像倉(cāng)庫(kù),幫助組織和團(tuán)隊(duì)有效地存儲(chǔ)计露、管理和分發(fā)容器鏡像博脑,并提供了訪問(wèn)控制憎乙、安全掃描和審計(jì)等功能,以增強(qiáng)容器化應(yīng)用的安全性和可管理性叉趣。
一泞边、安裝docker
在 CentOS 系統(tǒng)上安裝 Docker 和 Docker Compose,并升級(jí) Python pip 工具君账。
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum install docker-ce -y
yum install python-pip -y
pip install --upgrade pip
pip install docker-compose (單機(jī)編排工具)
二繁堡、更改vim /etc/docker/daemon.json 讓其信任syuee.com 這個(gè)域名
注意,k8s機(jī)器也更改如下配置
{
? "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file",
? "log-opts": {
? ? "max-size": "100m"
? },
? "registry-mirrors": ["https://f4573wwn.mirror.aliyuncs.com"],
? "insecure-registries": ["https://hub.syuee.com"]? ?##認(rèn)為它是安全的證書(shū),省掉購(gòu)買證書(shū)環(huán)節(jié)
}
yum -y install lrzsz? ##lrzsz?是一個(gè)用于在終端中進(jìn)行文件傳輸?shù)墓ぞ呦缡С滞ㄟ^(guò)串口椭蹄、Telnet、SSH 等協(xié)議進(jìn)行文件傳輸净赴。
將docker-compose拖進(jìn)服務(wù)器
mv docker-compose /usr/local/bin/
chmod a+x /usr/local/bin/?docker-compose
三绳矩、創(chuàng)建證書(shū)
openssl genrsa -des3 -out server.key 2048? ??#生成私鑰輸入兩次密碼(4位以上)
openssl req -new -key server.key -out server.csr? ??#創(chuàng)建一個(gè)證書(shū)的請(qǐng)求
#第一個(gè)國(guó)家名:CN
#第二個(gè)省:SH
#第三個(gè)市:SH
#第四個(gè)組織:syuee
#第五個(gè)機(jī)構(gòu):syuee
#完全合規(guī)域名:hub.syuee.com
#管理員郵箱:sivan@syuee.com
#是否要改密碼
cp server.key server.key.org? ?#備份私鑰
openssl rsa -in server.key.org -out server.key? ?#去掉密碼
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt??#簽名生成證書(shū)
mkdir /data/cert #創(chuàng)建/data/cert 目錄 (存儲(chǔ)ssl的目錄)
chmod -R 777 /data/cert
四玖翅、上傳harbor并解壓
將habor-offline-installer-v1.2.0.tgz拖進(jìn)服務(wù)器
tar -zvf?habor-offline-installer-v1.2.0.tgz
mv harbor /usr/local/
更改配置文件vim /usr/local/harbor/harbor.cfg
cd?/usr/local/harbor?
vim harbor.cfg
更改hostname
hostname = hub.syuee.com
更改訪問(wèn)為https
ui_url_protocol = https
默認(rèn)證書(shū)的位置是
ssl_cert = /data/cert/server.crt
ssl_cert_key = /data/cert/server.key
安裝harbor
./install.sh
五翼馆、其他配置
配置hosts 解析(包含Harbor本機(jī)以及其他k8s服務(wù)器)
C:\Windows\System32\drivers\etc 的hosts? 默認(rèn)賬號(hào)密碼是 admin\Harbor12345
cat /etc/hosts
echo "192.168.66.100 hub.syuee.com" >>? /etc/hosts
docker ps -a #查看運(yùn)行的容器
啟動(dòng)后:https://hub.syuee.com 訪問(wèn)倉(cāng)庫(kù)
六、更改其他docker 指定倉(cāng)庫(kù)
{
? "exec-opts": ["native.cgroupdriver=systemd"],
? "log-driver": "json-file",
? "log-opts": {
? ? "max-size": "100m"
? },
? "insecure-registries": ["https://hub.syuee.com"]
}
七金度、驗(yàn)證
1应媚、測(cè)試推送鏡像到倉(cāng)庫(kù)
docker login https://hub.syuee.com???#測(cè)試docker是否能訪問(wèn)倉(cāng)庫(kù)? ?admin\Harbor12345
docker pull nginx? #下載一個(gè)鏡像
docker tag nginx:latest hub.syuee.com/library/nginx:v1? ?#anHarbor標(biāo)準(zhǔn),推送鏡像需要?重新打標(biāo)簽
docker push hub.syuee.com/library/nginx:v1? #推送到倉(cāng)庫(kù)
hub.syuee.com/library/ingress-nginx-controller:v0.44.0
2猜极、測(cè)試從k8s上拉取倉(cāng)庫(kù)中鏡像
kubectl run nginx-deployment --image=hub.syuee.com/library/nginx:v1 --port=80 --replicas=1? ? ? #在 Kubernetes 集群中創(chuàng)建一個(gè)名為?nginx-deployment?的部署(Deployment)對(duì)象中姜,并使用指定的鏡像、端口和副本數(shù)量進(jìn)行配置跟伏。從 Kubernetes 1.18 開(kāi)始丢胚,kubectl run?命令的行為發(fā)生了變化。在新版本中受扳,kubectl run?命令默認(rèn)創(chuàng)建的是一個(gè) Pod携龟,而不是 Deployment。如果你使用的是較新的 Kubernetes 版本勘高,可以使用?kubectl create deployment?命令來(lái)創(chuàng)建部署對(duì)象峡蟋。
kubectl get deployment? ?#獲取當(dāng)前 Kubernetes 集群中的部署(Deployment)對(duì)象的信息。包含就緒副本數(shù)华望、最新副本數(shù)和可用副本數(shù)等信息层亿。
kubectl get rs? ?#rs?是要獲取信息的資源類型,表示 ReplicaSet 對(duì)象立美。包含期望副本數(shù)、當(dāng)前副本數(shù)和可用副本數(shù)等信息
kubectl get pod
kubectl get pod -0 wide
3方灾、k8s集群網(wǎng)絡(luò)訪問(wèn)設(shè)置
kubectl scale --replicas=3 deployment/nginx-deployment? #對(duì)pod擴(kuò)容成3個(gè)副本
kubectl get svc? #Service 是 Kubernetes 中用于提供網(wǎng)絡(luò)訪問(wèn)和負(fù)載均衡的對(duì)象建蹄,用于將一組 Pod 暴露給集群內(nèi)外的其他組件或用戶碌更。
問(wèn)題1:怎么訪問(wèn)三個(gè)pod?傳統(tǒng)通過(guò)nginx的upstream洞慎。k8s通過(guò)IPVS服務(wù)
kubectl expose deployment nginx-deployment --port=30000 --target-port=80? #在 Kubernetes 將創(chuàng)建一個(gè) Service 對(duì)象痛单,并將其與指定的 Deployment 對(duì)象關(guān)聯(lián)起來(lái)。該 Service 對(duì)象將使用指定的端口號(hào)(這里是 30000)暴露服務(wù)劲腿,并將流量轉(zhuǎn)發(fā)到與 Deployment 關(guān)聯(lián)的 Pod 的指定端口號(hào)(這里是 80)旭绒。這樣,通過(guò)訪問(wèn) Service 的 IP 地址和端口號(hào)(例如焦人,http://<Service-IP>:30000)挥吵,可以訪問(wèn)到運(yùn)行在 Deployment 中的 Pod 提供的服務(wù)。
ipvsadm -Ln | grep 10.97.154.59? #使用 ipvsadm 工具來(lái)列出 IPVS(IP Virtual Server)的配置花椭。查找與指定 IP 地址相關(guān)的負(fù)載均衡規(guī)則或配置信息忽匈。通過(guò)執(zhí)行該命令,可以查看與指定 IP 地址相關(guān)的負(fù)載均衡配置矿辽,例如目標(biāo)服務(wù)器的 IP 地址丹允、端口號(hào)、負(fù)載均衡算法等袋倔。
ipvsadm -Ln?
問(wèn)題2:怎么通過(guò)外網(wǎng)訪問(wèn)nginx-deployment 雕蔽?10.97.154.59是內(nèi)網(wǎng)地址,無(wú)法訪問(wèn)宾娜,但是可以 通過(guò)將svc的type改為NodePort類型批狐,自動(dòng)暴露端口 。注意碳默,此時(shí)通過(guò)https://192.168.66.10?:31859 贾陷、https://192.168.66.20?:31859 、https://192.168.66.21 :31859?可以訪問(wèn)到NodePord節(jié)點(diǎn)
NodePort:
NodePort 是一種 Service 類型嘱根,它在每個(gè)節(jié)點(diǎn)上使用一個(gè)固定的端口(NodePort)來(lái)公開(kāi)服務(wù)髓废。
當(dāng)創(chuàng)建一個(gè) NodePort 類型的 Service 時(shí),Kubernetes 集群會(huì)為該 Service 在每個(gè)節(jié)點(diǎn)上選擇一個(gè)端口该抒,并將該端口映射到該 Service 的目標(biāo)端口(TargetPort)慌洪。
外部用戶可以通過(guò)訪問(wèn)任何節(jié)點(diǎn)的?<NodeIP>:<NodePort>?來(lái)訪問(wèn) Service,流量會(huì)被轉(zhuǎn)發(fā)到 Service 底層的 Pod凑保。
NodePort 類型的 Service 具有兩個(gè) IP 地址:一個(gè)是 Service 的 ClusterIP(集群內(nèi)部 IP)冈爹,用于在集群內(nèi)部訪問(wèn) Service;另一個(gè)是每個(gè)節(jié)點(diǎn)的 IP 地址欧引,用于在集群外部訪問(wèn) Service频伤。
ClusterIP:
ClusterIP 是另一種 Service 類型,它為 Service 分配一個(gè)虛擬 IP 地址(ClusterIP)芝此。
ClusterIP 類型的 Service 只能在集群內(nèi)部訪問(wèn)憋肖,外部用戶無(wú)法直接訪問(wèn)該 Service因痛。
ClusterIP 類型的 Service 將流量轉(zhuǎn)發(fā)到底層的 Pod,但不會(huì)公開(kāi)給集群外部岸更。
ClusterIP 類型的 Service 可以通過(guò)其他 Service 或 Ingress 對(duì)象來(lái)公開(kāi)給集群外部鸵膏。
在 Kubernetes 中,NodePort怎炊、Port 和 TargetPort 是 Service(服務(wù))對(duì)象中用于定義端口映射和流量轉(zhuǎn)發(fā)的不同屬性谭企。
NodePort:
NodePort 是 Service 對(duì)象的一個(gè)屬性,用于指定在每個(gè)節(jié)點(diǎn)上公開(kāi)服務(wù)的端口评肆。
它是一個(gè)大于30000且小于32767的整數(shù)值债查,由 Kubernetes 集群自動(dòng)分配。
外部用戶可以通過(guò)訪問(wèn)任何節(jié)點(diǎn)的?<NodeIP>:<NodePort>?來(lái)訪問(wèn) Service糟港,流量會(huì)被轉(zhuǎn)發(fā)到 Service 底層的 Pod攀操。
NodePort 是一種公開(kāi)服務(wù)給集群外部訪問(wèn)的方式。
Port:
Port 是 Service 對(duì)象的另一個(gè)屬性秸抚,用于指定 Service 對(duì)象的端口號(hào)速和。
它定義了 Service 對(duì)象的入口端口,用于接收流量剥汤。
Port 是 Service 對(duì)象對(duì)外公開(kāi)的端口颠放,可以在集群內(nèi)外使用該端口來(lái)訪問(wèn) Service。
TargetPort:
TargetPort 是 Service 對(duì)象的另一個(gè)屬性吭敢,用于指定將流量轉(zhuǎn)發(fā)到 Service 底層 Pod 的端口碰凶。
它定義了 Service 對(duì)象將流量轉(zhuǎn)發(fā)到哪個(gè) Pod 的端口。
TargetPort 是 Service 對(duì)象與后端 Pod 之間的通信端口鹿驼。
總結(jié):
NodePort 是用于在每個(gè)節(jié)點(diǎn)上公開(kāi)服務(wù)的端口欲低,用于集群外部訪問(wèn)。
Port 是 Service 對(duì)象對(duì)外公開(kāi)的端口畜晰,用于接收流量砾莱。
TargetPort 是 Service 對(duì)象將流量轉(zhuǎn)發(fā)到后端 Pod 的端口。
? 外網(wǎng)------------------------Service --------------------------pod
NodePort?? ? ------------? ? ??Port? ? ? ?? ------------? ???TargetPort?