用控制器來完成集群的工作負載,那么應用如何暴漏出去?需要通過微服務暴漏出去后才能被訪問
Service是一組提供相同服務的Pod對外開放的接口。
借助Service,應用可以實現服務發現和負載均衡。
service默認只支持4層負載均衡能力,沒有7層功能。(可以通過Ingress實現)
#生成控制器文件并建立控制器
[root@k8s-master ~]# kubectl create deployment timinglee --image myapp:v1 ?--replicas 2 --dry-run=client -o yaml > timinglee.yaml
#生成微服務yaml追加到已有yaml中
[root@k8s-master ~]# kubectl expose deployment timinglee --port 80 --target-port 80 --dry-run=client -o yaml >> timinglee.yaml
然后編輯文件,用---分隔開
微服務默認使用iptables調度
三 ipvs模式
Service 是由 kube-proxy 組件,加上 iptables 來共同實現的
kube-proxy 通過 iptables 處理 Service 的過程,需要在宿主機上設置相當多的 iptables 規則,如果宿主機有大量的Pod,不斷刷新iptables規則,會消耗大量的CPU資源
IPVS模式的service,可以使K8s集群支持更多量級的Pod
所以我們一般使用ipvs模式,在各個節點上都下載一下ipvs,然后
kubectl -n kube-system edit cm kube-proxy
修改master節點的代理配置
重啟pod,在pod運行時配置文件中采用默認配置,當改變配置文件后已經運行的pod狀態不會變化,所以要重啟pod
切換ipvs模式后,kube-proxy會在宿主機上添加一個虛擬網卡:kube-ipvs0,并分配所有service IP
四 微服務類型詳解
4.1 clusterip
特點:
clusterip模式只能在集群內訪問,并對集群內的pod提供健康檢測和自動發現功能
4.2 ClusterIP中的特殊模式headless
headless(無頭服務)
對于無頭 Services
并不會分配 Cluster IP,kube-proxy不會處理它們, 而且平臺也不會為它們進行負載均衡和路由,集群訪問通過dns解析直接指向到業務pod上的IP,所有的調度有dns單獨完成
4.3 nodeport
通過ipvs暴漏端口從而使外部主機通過master節點的對外ip:<port>來訪問pod業務
[!NOTE]
nodeport默認端口
nodeport默認端口是30000-32767,超出會報錯
4.4 loadbalancer
云平臺會為我們分配vip并實現訪問,如果是裸金屬主機那么需要metallb來實現ip的分配
4.5 metalLB
metalLB功能
為LoadBalancer分配vip
4.6 externalname
開啟services后,不會被分配IP,而是用dns解析CNAME固定域名來解決ip變化問題
一般應用于外部業務和pod溝通或外部業務遷移到pod內時
在應用向集群遷移過程中,externalname在過度階段就可以起作用了。
集群外的資源遷移到集群時,在遷移的過程中ip可能會變化,但是域名+dns解析能完美解決此問題