溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

k8s 之 應(yīng)用實(shí)踐-Service,Ingress

發(fā)布時(shí)間:2020-06-06 02:37:37 來源:網(wǎng)絡(luò) 閱讀:3098 作者:breaklinux 欄目:系統(tǒng)運(yùn)維

1.背景;

? ? ? ? 由于簡(jiǎn)化部署k8s 集群 ,公司的k8s 部署方案使用的是 kubeadm ,且跟進(jìn)線上線下維度進(jìn)行集群劃分,為何要使用kubeadm 主要有兩個(gè)原因:1.部署方便快捷,2.k8s節(jié)點(diǎn)擴(kuò)容方便? 3.部署難度降低;?


2.系統(tǒng)環(huán)境;


系統(tǒng)版本內(nèi)核版本etcd?備注
CentOS Linux release 7.5.18043.10.0-862.14.4.el7.x86_64etcdctl version: 3.3.11





3.相關(guān)組件版本;


kubeadmin 組件名稱組件版本名稱備注



k8s.gcr.io/kube-apiserver?



v1.13.4

kube-apiserver 是 Kubernetes 最重要的核心組件之一,主要提供以下的功能
  • 提供集群管理的 REST API 接口,包括認(rèn)證授權(quán)、數(shù)據(jù)校驗(yàn)以及集群狀態(tài)變更等

  • 提供其他模塊之間的數(shù)據(jù)交互和通信的樞紐(其他模塊通過 API Server 查詢或修改數(shù)據(jù),只有 API Server 才直接操作 etcd)






k8s.gcr.io/kube-controller-manager?





v1.13.4

kube-scheduler 負(fù)責(zé)分配調(diào)度 Pod 到集群內(nèi)的節(jié)點(diǎn)上,它監(jiān)聽 kube-apiserver,查詢還未分配 Node 的 Pod,然后根據(jù)調(diào)度策略為這些 Pod 分配節(jié)點(diǎn)(更新 Pod 的?NodeName?字段)

調(diào)度器需要充分考慮諸多的因素:

  • 公平調(diào)度

  • 資源高效利用

  • QoS

  • affinity 和 anti-affinity

  • 數(shù)據(jù)本地化(data locality)

  • 內(nèi)部負(fù)載干擾(inter-workload interference)

  • deadlines


k8s.gcr.io/kube-scheduler


v1.13.4

Controller Manager 由 kube-controller-manager 和 cloud-controller-manager 組成,是 Kubernetes 的大腦,它通過 apiserver 監(jiān)控整個(gè)集群的狀態(tài),并確保集群處于預(yù)期的工作狀態(tài)。



?k8s.gcr.io/kube-proxy



v1.13.4

每臺(tái)機(jī)器上都運(yùn)行一個(gè) kube-proxy 服務(wù),它監(jiān)聽 API server 中 service 和 endpoint 的變化情況,并通過 iptables 等來為服務(wù)配置負(fù)載均衡(僅支持 TCP 和 UDP)。

kube-proxy 可以直接運(yùn)行在物理機(jī)上,也可以以 static pod 或者 daemonset 的方式運(yùn)行。

k8s.gcr.io/pause3.1

Kubernetes為每個(gè)Pod都附屬了gcr.io/google_containers/pause:latest,這個(gè)容器只接管Pod的網(wǎng)絡(luò)信息,業(yè)務(wù)容器通過加入網(wǎng)絡(luò)容器的網(wǎng)絡(luò)來實(shí)現(xiàn)網(wǎng)絡(luò)共享。此容器隨著pod創(chuàng)建而創(chuàng)建,隨著Pod刪除而刪除,正如其名字“pause”

該容器是對(duì)業(yè)務(wù)pod的命名空間的解析。


k8s.gcr.io/coredns1.2.6DNS 是 Kubernetes 的核心功能之一,通過 kube-dns 或 CoreDNS 作為集群的必備擴(kuò)展來提供命名服務(wù)。


weaveworks/weave

2.5.2

Weave Net是一個(gè)多主機(jī)容器網(wǎng)絡(luò)方案,支持去中心化的控制平面,各個(gè)host上的wRouter間通過建立Full Mesh的TCP鏈接,并通過Gossip來同步控制信息。這種方式省去了集中式的K/V Store,能夠在一定程度上減低部署的復(fù)雜性,



4.應(yīng)用實(shí)踐;


(1).集群已經(jīng)正常運(yùn)行如下所示;


k8s 之 應(yīng)用實(shí)踐-Service,Ingress


2.查看deployment 配置;

apiVersion:?extensions/v1beta1?
kind:?Deployment?
metadata:?
??name:?nginx-dp
spec:?
??selector:
????matchLabels:
??????app:?nginx-dp
??replicas:?1
??template:?
????metadata:?
??????labels:?
????????app:?nginx-dp?
????spec:?
??????containers:?
????????-?name:?nginx?
??????????image:?nginx:alpine?
??????????ports:?
????????????-?containerPort:?80


3.查看ervice 配置;


apiVersion:?v1
kind:?Service
metadata:
??name:?nginx-dp-cpf
spec:
??type:?NodePort
??ports:
??-?nodePort:?30001
????port:?80
????targetPort:?80
????protocol:?TCP
??selector:
????app:?nginx-dp


4.查看生成endpoints?


k8s 之 應(yīng)用實(shí)踐-Service,Ingress


5.查看service 規(guī)則;

k8s 之 應(yīng)用實(shí)踐-Service,Ingress


6.查看由kube-proxy 生成的iptables 防火墻規(guī)則; (正常規(guī)則)

k8s 之 應(yīng)用實(shí)踐-Service,Ingress


注意:

? ? ? 1.如果防火墻規(guī)則出現(xiàn) 類似如下規(guī)則:

? ? ? ? -A KUBE-EXTERNAL-SERVICES -p tcp -m comment --comment "default/nginx-dp-cpf: has no endpoints" -m addrtype --dst-type LOCAL -m tcp --dport 30001 -j REJECT --reject-with icmp-port-unreachable

? ? ? 2.解決辦法;

? ? ? ? ?? (1).net.ipv4.ip_forward?= 1? #系統(tǒng)內(nèi)核路由轉(zhuǎn)發(fā)功能

? ? ? ? ? ?(2).iptables -P FORWARD ACCEPT? #允許 iptables??FORWARD 鏈規(guī)則通過;

? ? ? ? ? ?(3).iptables -P?OUTPUT ACCEPT? #允許 iptables??OUTPUT?鏈規(guī)則通過;

? ? ? ? ? ?(4).檢查deployment?labels? 和 service?labels?設(shè)置是否關(guān)聯(lián)正確;

? ? ? ? ? ?(5).kubectl get endpoints? --show-labels? #注意此規(guī)則和防火墻規(guī)則匹配 若出現(xiàn)none 請(qǐng)檢查防火墻規(guī)則;


7.進(jìn)行功能測(cè)試 (k8s 集群內(nèi)進(jìn)行測(cè)試);

k8s 之 應(yīng)用實(shí)踐-Service,Ingress


8.ingress 部署;

#master?端執(zhí)行;
kubectl?apply?-f?https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml
kubectl?apply?-f?https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/baremetal/service-nodeport.yaml

注意:?

? ? ? nodeSelector 字段 labels? 和 node labels 關(guān)聯(lián); 否則運(yùn)行ingres pod 出現(xiàn) peding 狀態(tài);

k8s 之 應(yīng)用實(shí)踐-Service,Ingress


k8s 之 應(yīng)用實(shí)踐-Service,Ingress


8.ingress 配置;

##配置yaml
apiVersion:?extensions/v1beta1
kind:?Ingress
metadata:
??name:?test-ingress
spec:
??rules:
??-?http:
??????paths:
??????-?path:?/
????????backend:
??????????serviceName:?test-nginx?
??????????servicePort:?80


###查看創(chuàng)建?ingress;

k8s 之 應(yīng)用實(shí)踐-Service,Ingress

####測(cè)試訪問###

k8s 之 應(yīng)用實(shí)踐-Service,Ingress


####基于域名多服務(wù)的 Ingress

路由到多服務(wù)的 Ingress 即根據(jù)請(qǐng)求路徑的不同轉(zhuǎn)發(fā)到不同的后端服務(wù)上,比如

www.breaklinux.com?->?10.109.21.77->?/test1?????s1:80
??????????????????????????????????—>?/test2??????s2:80
apiVersion:?extensions/v1beta1
kind:?Ingress
metadata:
??name:?test
spec:
??rules:
??-?host:?www.breaklinux.com
????http:
??????paths:
??????-?path:?/test1
????????backend:
??????????serviceName:?test-nginx
??????????servicePort:?80
??????-?path:?/test2
????????backend:
??????????serviceName:?nginx-dp-test-01?
??????????servicePort:?80

###虛擬主機(jī) Ingress

apiVersion:?extensions/v1beta1
kind:?Ingress
metadata:
??annotations:
????nginx.ingress.kubernetes.io/configuration-snippet:?""
????nginx.ingress.kubernetes.io/proxy-body-size:?10240m
????nginx.ingress.kubernetes.io/proxy-read-timeout:?"36000"
????nginx.ingress.kubernetes.io/proxy-send-timeout:?"36000"
????nginx.ingress.kubernetes.io/rewrite-target:?/$1
????nginx.ingress.kubernetes.io/ssl-redirect:?"false"
??name:?test-nginx-ingess
spec:
??rules:
??-?host:?test-nginx-ingress.dev.k8s.chj.cloud
????http:
??????paths:
??????-?backend:
??????????serviceName:?test-nginx
??????????servicePort:?80?
????????path:?/?(.*)

? ##基于虛擬主機(jī)訪問測(cè)試#

##因?yàn)闆]有dns 服務(wù)環(huán)境 綁定hosts 進(jìn)行測(cè)試

cat?/etc/hosts

10.109.21.77???www.breaklinux.com?test-nginx-ingress.dev.k8s.chj.cloud

k8s 之 應(yīng)用實(shí)踐-Service,Ingress


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI