k8s-service-ingress

service

? service存在的意義

? ? ? ? 1 防止pod失去聯(lián)系(服務(wù)發(fā)現(xiàn))

2 定義一組pod的訪問策略(負載均衡)

通過label-selector相關(guān)聯(lián)(標(biāo)簽關(guān)聯(lián))

通過service實現(xiàn)pod的負載均衡(tcp/UDP/只能支持4層)

service只支持4層負載均衡

4層: OSI中的傳輸層, TCP/UDP協(xié)議 只負責(zé)數(shù)據(jù)包的轉(zhuǎn)發(fā)

7層: OSI中的應(yīng)用層 http fTP? 可以拿到這些協(xié)議頭部信息 可以實現(xiàn)基于協(xié)議層面的處理

service的三種常用的類型

? ClusterIP 集群內(nèi)部使用

? ? ? clusterIP 默認分配一個穩(wěn)定的IP? 即VIP 只能在集群內(nèi)部訪問 (同Namespace內(nèi)的pod)

? NOdePort 對外部暴露應(yīng)用

? ? ? NoPort訪問流程

? ? ? ? ? [? USER > 域名 > node ip+port > iptables/ipvs > pod]


? LoadBalancer 對外暴露應(yīng)用 適合公有云


? LoadBalancer訪問流程

? ? [user > 域名 > 公有云的slb (自動配置端口) > node:ip:port > pod]

? userspace 自己用戶實現(xiàn)的轉(zhuǎn)發(fā)

? iptables? 阻止ip通信 端口映射 跟蹤包狀態(tài)? 數(shù)據(jù)包的修改

? ipvs? ? ? LVS 就是基于ipvs模塊做的4層負載均衡器


kube-proxy?

? ? 1:實現(xiàn)數(shù)據(jù)包的轉(zhuǎn)發(fā)

? ? 2:將service相關(guān)的規(guī)則落地現(xiàn)實

iptables規(guī)則:

Nodeport -> KUBE-SVC-RRHDV4CFXHW7RWV3 -> KUBE-SEP-XE5XFBDN7LLHNVMO -> -j DNAT --to-destination 10.244.2.2:80

clusterip -> KUBE-SVC-RRHDV4CFXHW7RWV3 -> KUBE-SEP-XE5XFBDN7LLHNVMO -> -j DNAT --to-destination 10.244.2.2:80

-A KUBE-SVC-RRHDV4CFXHW7RWV3 -m statistic --mode random --probability 0.33332999982 -j KUBE-SEP-BGV4R4Y32WAZO4AD

-A KUBE-SVC-RRHDV4CFXHW7RWV3 -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-XE5XFBDN7LLHNVMO

-A KUBE-SVC-RRHDV4CFXHW7RWV3 -j KUBE-SEP-CYUFO3BNAYR2R5O3

上面是轉(zhuǎn)發(fā)到3個pod規(guī)則视事。

輪訓(xùn)

ip_vs啟動

lsmod|grep ip_vs 查看ip_vs是否啟動

modprobe ip_v? 啟動ipvs

啟動模塊 ip_vs?

? ? modprobe ip_vs

modprobe ip_vs_rr

modprobe ip_vs_wrr

modprobe ip_vs_sh

modprobe nf_conntrack_ipv4

在每一個機器上面執(zhí)行一遍 把這些啟動的模塊加入到 [etc/rc.local]里面開機啟動

通過 kubectl get cm -n kube-system 查看kube-porxy

通過 kubectl edit cm kube-porxy -n kube-system 修改啟動ipvs? mode"ipvs"

lvs? 虛擬服務(wù)器? 真實服務(wù)器

? TCP? 10.96.0.1:443 rr

? -> 192.168.195.110:6443? ? ? ? Masq? ? 1? ? ? 0? ? ? ? ? 0? ? ? ?

TCP? 10.96.0.10:53 rr

? -> 10.244.1.6:53? ? ? ? ? ? ? ? Masq? ? 1? ? ? 0? ? ? ? ? 0? ? ? ?

? -> 10.244.1.7:53? ? ? ? ? ? ? ? Masq? ? 1? ? ? 0? ? ? ? ? 0? ? ? ?

TCP? 10.96.0.10:9153 rr

? -> 10.244.1.6:9153? ? ? ? ? ? ? Masq? ? 1? ? ? 0? ? ? ? ? 0? ? ? ?

? -> 10.244.1.7:9153? ? ? ? ? ? ? Masq? ? 1? ? ? 0? ? ? ? ? 0? ? ? ?

UDP? 10.96.0.10:53 rr

? -> 10.244.1.6:53? ? ? ? ? ? ? ? Masq? ? 1? ? ? 0? ? ? ? ? 0? ? ? ?

? -> 10.244.1.7:53? ? ? ? ? ? ? ? Masq? ? 1? ? ? 0? ? ? ?

ipvs 通過 虛擬的vip 流量首先會到ipvs的虛擬服務(wù)器 在通過虛擬服務(wù)器 轉(zhuǎn)發(fā)給真實服務(wù)器

通過 yum install ipvsadm -y 安裝ipvs的用戶端看見當(dāng)前狀態(tài)和轉(zhuǎn)發(fā)規(guī)則

iptables

靈活強大 規(guī)則遍歷匹配和更新慢 呈線性時延

ipvs

? ? 工作在內(nèi)核 有更好的性能

調(diào)度算法豐富 rr wrr lc wlc ip hash

ipvs 在部署 pod多的時候 客園切換因為調(diào)度快規(guī)則匹配少

有ipvs以后iptables的規(guī)則不要清空因為 ipvs還是需要通過iptables轉(zhuǎn)發(fā)流量到ipvs

service DNS

? 程序比寫死ip更好的方式

? ? 1. dns解析

2. 綁定hosts

coreDNS pod ->? 獲取server (apiserver 獲取) -> 更新到本地

kubelet 運行pod > pod 默認走> coreDNS pod >?

[1. 采用Nodeport 對外暴露應(yīng)用 前面加一個LB實現(xiàn)統(tǒng)一訪問入口]

[2. 優(yōu)秀使用IPVS 代理模式]

[3. 集群內(nèi)部采用dns名稱訪問]译蒂、

web.default.svc.cluster.local? 名稱.命名空間.svc.默認域

ingress

? ? ? [nodeporet存在的不足

? ? ? 一個端口只能一個服務(wù)去使用 端口需要提前規(guī)劃

? 只支持4層負載均衡]


pod與ingress的關(guān)系

? ? [通過 service相聯(lián)

? ? 通過ingress Controll現(xiàn)實pod的負載均衡

支持tcp/udp4層和http7層]

ingress訪問流程

? ? user >? 域名 >

node: ip:80/443 > ingress controller > 域名分流 > pod

? ? ingress

? 基于URL路由到多個服務(wù)類式nginx的反向代理

[apiVersion: networking.k8s.io/v1beta1

kind: Ingress

metadata:

name: url-ingress

annotations:

nginx.ingress.kubernetes.io/rewrite-target: /

spec:

rules:

- host: foobar.ctnrs.com

http:

paths:

- path: /foo

backend:

serviceName: service1

servicePort: 80

- host: foobar.ctnrs.com

http:

paths:

- path: /bar

backend:

serviceName: service2

servicePort: 80]

ingress 基于虛擬機主機

配置兩個域名 主機就可以了

? [apiVersion: networking.k8s.io/v1beta1

kind: Ingress

metadata:

? name: name-virtual-host-ingress

spec:

? rules:

? - host: foo.ctnrs.com

? ? http:

? ? ? paths:

? ? ? - backend:

? ? ? ? ? serviceName: service1

? ? ? ? ? servicePort: 80

? - host: bar.ctnrs.com

? ? http:

? ? ? paths:

? ? ? - backend:

? ? ? ? ? serviceName: service2

? ? ? ? ? servicePort: 80]

Annotations對Ingress個性化配置

? +超時時間

[apiVersion: networking.k8s.io/v1beta1

kind: Ingress

metadata:

? name: example-ingress

? annotations:

? ? kubernetes.io/ingress.class: "nginx“

? ? nginx.ingress.kubernetes.io/proxy-connect-timeout: "600"

? ? nginx.ingress.kubernetes.io/proxy-send-timeout: "600"

? ? nginx.ingress.kubernetes.io/proxy-read-timeout: "600"

? ? nginx.ingress.kubernetes.io/proxy-body-size: "10m"

spec:

? rules:

? - host: example.ctnrs.com

? ? http:

? ? ? paths:

? ? ? - path: /

? ? ? ? backend:

? ? ? ? ? serviceName: web

? ? ? ? ? servicePort: 80]

ingress controller pod -> 獲取service(apiserver)-> 應(yīng)用到本地nginx

1、控制器獲取service關(guān)聯(lián)的pod應(yīng)用到nginx

2忍燥、nginx 提供七層負載均衡

ingress controller 高可用方案

? 1. 使用? Daemonset+nodeselector

? ? ? ? ? 固定ingress到兩個nodes上

? 訪問邏輯

? ? ? user > 域名解析到 > vip (keepalived) ha功能 > pod

? 2.

? ? ? ? ? 固定ingress到N個nodes上 因并發(fā)定

? ? ? ? user > 域名 > LB (nginx? lvs haproxy) >? ingress controller > pod ?

360 調(diào)度流程

? ? ? lvs(定制開發(fā)的lvs控制器 對接lvs的api)? >? pod


應(yīng)用程序管理配置

? ? secret

? ? 加密數(shù)據(jù)并存放在ETCD中 讓pod容器以掛載volume的方式 去訪問

應(yīng)用場景 憑據(jù)

pod使用 secret的兩種方式

? ? ? 變量注入

? 掛載


secret的應(yīng)用場景

? ? 1. ingress? https證書

2. secret 存放docker registry認證信息

3. 存放文件內(nèi)容或者是字符串

configmap 主要是使用文件傳入 和secret的使用場景不一樣

[參數(shù)

? docker-registry 創(chuàng)建一個給 Docker registry 使用的 secret

? generic? ? ? ? 從本地 file, directory 或者 literal value 創(chuàng)建一個 secret

? tls? ? ? ? ? ? 創(chuàng)建一個 TLS secret

用法

? kubectl create secret [flags] [options]]

---

用戶名 密碼這些必須通過base64轉(zhuǎn)過 因為這樣子比較安全

echo -n 'admin' | base64

---

創(chuàng)建一個secret

apiVersion: v1

kind: Secret

metadata:

? name: mysecret

type: Opaque

data:

? username: YWRtaW4=

? password: MWYyZDFlMmU2N2Rm

----

引入secret變量

[apiVersion: v1

kind: Pod

metadata:

? name: mypod

spec:

? containers:

? - name: nginx

? ? image: nginx

? ? env:

? ? ? - name: secret_user

? ? ? ? valueFrom:

? ? ? ? ? secretKeyRef:

? ? ? ? ? ? name: mysecret

? ? ? ? ? ? key: username

? ? ? - name: secret_passwd

? ? ? ? valueFrom:

? ? ? ? ? secretKeyRef:

? ? ? ? ? ? name: mysecret

? ? ? ? ? ? key: password]

~? ? ? ? ? ? ? ? ? ? ? ?

-------------------------------------

secret通過掛載的方式

apiVersion: v1

kind: Pod

metadata:

? name: mypod

spec:

? containers:

? - name: nginx

? ? image: nginx

? ? volumeMounts:

? ? - name: foo

? ? ? mountPath: "/etc/foo"

? ? ? readOnly: true

? volumes:

? - name: foo

? ? secret:

? ? ? secretName: mysecret

~? ? ? ? ? ? ?

----------------------------

應(yīng)用程序如何動態(tài)更新配置

? 1. 重新構(gòu)建pod

? 2. 應(yīng)用程序本身實現(xiàn)監(jiān)聽本地配置文件 如果發(fā)生變化觸發(fā)配置熱更新

? 3. 使用 sidecal容器是否觸發(fā)更新 如果發(fā)生變化觸發(fā) socket http 通知應(yīng)用程序熱更新



? 采用配置中心的 例如 nacos apollo

------------------------------

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市家乘,隨后出現(xiàn)的幾起案子泻帮,更是在濱河造成了極大的恐慌,老刑警劉巖都弹,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件娇豫,死亡現(xiàn)場離奇詭異,居然都是意外死亡畅厢,警方通過查閱死者的電腦和手機冯痢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來框杜,“玉大人浦楣,你說我怎么就攤上這事∵淙瑁” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長夹供。 經(jīng)常有香客問我仁堪,道長,這世上最難降的妖魔是什么鸟辅? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任匪凉,我火速辦了婚禮再层,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蒿秦。我一直安慰自己棍鳖,他們只是感情好碗旅,可當(dāng)我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著医瘫,像睡著了一般旧困。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天馍悟,我揣著相機與錄音剩晴,去河邊找鬼。 笑死毅整,一個胖子當(dāng)著我的面吹牛绽左,可吹牛的內(nèi)容都是我干的拼窥。 我是一名探鬼主播鲁纠,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼改含,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鞍爱?” 一聲冷哼從身側(cè)響起尚胞,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤笼裳,失蹤者是張志新(化名)和其女友劉穎唯卖,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體躬柬,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年橄碾,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颠锉。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖琼掠,靈堂內(nèi)的尸體忽然破棺而出拒垃,到底是詐尸還是另有隱情,我是刑警寧澤瓷蛙,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站艰猬,受9級特大地震影響横堡,放射性物質(zhì)發(fā)生泄漏命贴。R本人自食惡果不足惜食听,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一胚泌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧玷室,春花似錦穷缤、人聲如沸敌蜂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽章喉。三九已至,卻和暖如春身坐,著一層夾襖步出監(jiān)牢的瞬間秸脱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工部蛇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留摊唇,地道東北人。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓涯鲁,卻偏偏與公主長得像巷查,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子抹腿,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,864評論 2 354