欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Kubernetes中,通過Service訪問Pod快速入門-創(chuàng)新互聯(lián)

一.背景

理想狀態(tài)下,我們可以認為Kubernetes Pod是健壯的。但是,理想與現(xiàn)實的差距往往是非常大的。很多情況下,Pod中的容器可能會因為發(fā)生故障而死掉。Deployment等Controller會通過動態(tài)創(chuàng)建和銷毀Pod來保證應(yīng)用整體的健壯性。眾所周知,每個Pod都擁有自己的IP地址,當(dāng)新的Controller用新的Pod替代發(fā)生故障的Pod時,我們會發(fā)現(xiàn),新的IP地址可能跟故障的Pod的IP地址可能不一致。此時,客戶端如何訪問這個服務(wù)呢?Kubernetes中的Service應(yīng)運而生。

成都創(chuàng)新互聯(lián)公司主營鏡湖網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶APP軟件開發(fā),鏡湖h5成都微信小程序搭建,鏡湖網(wǎng)站營銷推廣歡迎鏡湖等地區(qū)企業(yè)咨詢

二.實踐步驟

2.1 創(chuàng)建Deployment:httpd。

Kubernetes Service 邏輯上代表了一組具有某些label關(guān)聯(lián)的Pod,Service擁有自己的IP,這個IP是不變的。無論后端的Pod如何變化,Service都不會發(fā)生改變。創(chuàng)建YAML如下:

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: httpd
spec:
  replicas: 4
  template:
    metadata:
      labels:
        run: httpd
    spec:
      containers:
      - name: httpd
        image: httpd
        ports:
        - containerPort: 80

配置命令:

[root@k8s-m ~]# kubectl apply -f Httpd-Deployment.yaml
deployment.apps/httpd created

稍后片刻:

[root@k8s-m ~]# kubectl get pod -o wide
NAME                     READY   STATUS    RESTARTS   AGE     IP             NODE     NOMINATED NODE
httpd-79c4f99955-dbbx7   1/1     Running   0          7m32s   10.244.2.35    k8s-n2   <none>
httpd-79c4f99955-djv44   1/1     Running   0          7m32s   10.244.1.101   k8s-n1   <none>
httpd-79c4f99955-npqxz   1/1     Running   0          7m32s   10.244.1.102   k8s-n1   <none>
httpd-79c4f99955-vkjk6   1/1     Running   0          7m32s   10.244.2.36    k8s-n2   <none>
[root@k8s-m ~]# curl 10.244.2.35
<html><body><h2>It works!</h2></body></html>
[root@k8s-m ~]# curl 10.244.2.36
<html><body><h2>It works!</h2></body></html>
[root@k8s-m ~]# curl 10.244.1.101
<html><body><h2>It works!</h2></body></html>
[root@k8s-m ~]# curl 10.244.1.102
<html><body><h2>It works!</h2></body></html>

2.2 創(chuàng)建Service:httpd-svc。

創(chuàng)建YAML如下:

apiVersion: v1
kind: Service
metadata:
  name: httpd-svc
spec:
  selector:
    run: httpd
  ports:
  - protocol: TCP
    port: 8080
    targetPort: 80

配置完成并觀察:

[root@k8s-m ~]# kubectl apply -f Httpd-Service.yaml
service/httpd-svc created
[root@k8s-m ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
httpd-svc    ClusterIP   10.110.212.171   <none>        8080/TCP   14s
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP    11d
[root@k8s-m ~]# curl 10.110.212.171:8080
<html><body><h2>It works!</h2></body></html>
[root@k8s-m ~]# kubectl describe service httpd-svc
Name:              httpd-svc
Namespace:         default
Labels:            <none>
Annotations:       kubectl.kubernetes.io/last-applied-configuration:
                     {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"httpd-svc","namespace":"default"},"spec":{"ports":[{"port":8080,"...
Selector:          run=httpd
Type:              ClusterIP
IP:                10.110.212.171
Port:              <unset>  8080/TCP
TargetPort:        80/TCP
Endpoints:         10.244.1.101:80,10.244.1.102:80,10.244.2.35:80 + 1 more...
Session Affinity:  None
Events:            <none>

從以上內(nèi)容中的Endpoints可以看出服務(wù)httpd-svc下面包含我們指定的labels的Pod,cluster-ip通過iptables成功映射到Pod IP,成功。再通過iptables-save命令看一下相關(guān)的iptables規(guī)則。

[root@k8s-m ~]# iptables-save |grep "10.110.212.171"
-A KUBE-SERVICES ! -s 10.244.0.0/16 -d 10.110.212.171/32 -p tcp -m comment --comment "default/httpd-svc: cluster IP" -m tcp --dport 8080 -j KUBE-MARK-MASQ
-A KUBE-SERVICES -d 10.110.212.171/32 -p tcp -m comment --comment "default/httpd-svc: cluster IP" -m tcp --dport 8080 -j KUBE-SVC-RL3JAE4GN7VOGDGP
[root@k8s-m ~]# iptables-save|grep -v 'default/httpd-svc'|grep 'KUBE-SVC-RL3JAE4GN7VOGDGP'
:KUBE-SVC-RL3JAE4GN7VOGDGP - [0:0]
-A KUBE-SVC-RL3JAE4GN7VOGDGP -m statistic --mode random --probability 0.25000000000 -j KUBE-SEP-R5YBMKYSG56R4KDU
-A KUBE-SVC-RL3JAE4GN7VOGDGP -m statistic --mode random --probability 0.33332999982 -j KUBE-SEP-7G5ANBWSVVLRNZAH
-A KUBE-SVC-RL3JAE4GN7VOGDGP -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-2PT6QZGNQHS4OL4I
-A KUBE-SVC-RL3JAE4GN7VOGDGP -j KUBE-SEP-I4PXZ6UARQLLOV4E

我們可以進一步查看相關(guān)的轉(zhuǎn)發(fā)規(guī)則,此處省略。iptables將訪問Service的流量轉(zhuǎn)發(fā)到后端Pod,使用類似于輪詢的的負載均衡策略。

2.3 通過域名訪問Service。

我們的平臺是通過kubeadm部署的,版本是v1.12.1,這個版本自帶的dns相關(guān)組件是coredns。

[root@k8s-m ~]# kubectl get deployment --namespace=kube-system
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
coredns   2         2         2            2           17d

通過創(chuàng)建一個臨時的隔離環(huán)境來驗證一下DNS是否生效。

[root@k8s-m ~]# kubectl run -it --rm busybox --image=busybox /bin/sh
kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.
If you don't see a command prompt, try pressing enter.
/ # wget httpd-svc.default:8080
Connecting to httpd-svc.default:8080 (10.110.212.171:8080)
index.html           100% |*******************************************************************************************************************************|    45  0:00:00 ETA
/ # cat index.html
<html><body><h2>It works!</h2></body></html>

順便提一下,在未來版本中,kubectl run可能不再被支持,推薦使用kubectl create替代。此處偷了個懶,后續(xù)不建議如此操作。

在以上例子中,臨時的隔離環(huán)境的namespace為default,與我們新建的httpd-svc都在同一namespace內(nèi),httpd-svc.default的default可以省略。如果跨namespace訪問的話,那么namespace是不能省略的。

2.4 外網(wǎng)訪問Service。

通常情況下,我們可以通過四種方式來訪問Kubeenetes的Service,分別是ClusterIP,NodePort,Loadbalance,ExternalName。在此之前的實驗都是基于ClusterIP的,集群內(nèi)部的Node和Pod均可通過Cluster IP來訪問Service。NodePort是通過集群節(jié)點的靜態(tài)端口對外提供服務(wù)。
接下來我們將以NodePort為例來進行實際演示。修改之后的Service的YAML如下:

apiVersion: v1
kind: Service
metadata:
  name: httpd-svc
spec:
  type: NodePort
  selector:
    run: httpd
  ports:
  - protocol: TCP
    nodePort: 31688
    port: 8080
    targetPort: 80

配置后觀察:

[root@k8s-m ~]# kubectl apply -f  Httpd-Service.yaml
service/httpd-svc configured
[root@k8s-m ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
httpd-svc    NodePort    10.110.212.171   <none>        8080:31688/TCP   117m
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP          12d

Service httpd-svc的端口被映射到了主機的31688端口。YAML文件如果不指定nodePort的話,Kubernetes會在30000-32767范圍內(nèi)為Service分配一個端口。此刻我們就可以通過瀏覽器來訪問我們的服務(wù)了。在與node網(wǎng)絡(luò)互通的環(huán)境中,通過任意一個Node的IP:31688即可訪問剛剛部署好的Service。

三.總結(jié)

  1. 這些天一直在看kubernetes相關(guān)的書籍和文檔,也一直在測試環(huán)境中深度體驗kubernetes帶來的便捷,感觸良多,綜合自己的實踐寫下了這篇文章,以便后期溫習(xí)。距離生產(chǎn)環(huán)境上線的時間越來越近,希望在生產(chǎn)環(huán)境上線之前吃透kubernetes。
  2. 學(xué)習(xí)任何新東西都必須靜下心來,光看還不夠,還要結(jié)合適量的實際操作。操作完成之后要反復(fù)思考,總結(jié),沉淀,這樣才能成長。
  3. Kubernetes確實是一個比較復(fù)雜的系統(tǒng),概念很多,也比較復(fù)雜,在操作之前需要把基本概念理解清楚。

四.參考資料

  1. Kubernetes官方文檔

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

新聞名稱:Kubernetes中,通過Service訪問Pod快速入門-創(chuàng)新互聯(lián)
文章地址:http://aaarwkj.com/article20/hosco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站建站公司、網(wǎng)站策劃、搜索引擎優(yōu)化云服務(wù)器、企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名
朋友的尤物人妻中文字幕| 亚洲一区二区日韩在线| 久久国产精品一二三区| 日本人妻精品一区二区| 国产精品综合日韩精| 色哟哟网站在线精品视频 | 国产日韩欧美一区综合| 国产成人精品亚洲日本片| 少妇激情一区二区三区免费视频| 日本一区二区三区加勒比| 亚洲日本不卡在线一区二区| 99久久伊人精品综合观看| 亚洲人妻av一区二区三区| 日本在线免费成人高清| 国产亚洲av一区二区三区| 日韩精品在线观看你懂的| 欧美日韩精品人妻中文| 啪啪视频日韩一区二区| 歪歪私人影院午夜毛片| 在线观看一区二区三区国产视频| 精品国产一区=区三区乱码| 97超碰国产在线观看| 91在线播放欧美国产视频| 激情视频一区二区三区| 日韩有码在线中文字幕| 天堂av新版在线观看| 99精品人妻一区二区三区蜜桃| 18岁禁看网站在线看| 久久精品一区二区婷婷| 色噜噜狠狠狠久久综合一区| 男人天堂插插综合搜索| 久久99国产综合精品女同| 日本最新一区二区三区视频| 中文字幕日韩欧美第一页| 欧美特黄大片在线观看| 6080yy精品一区二区三区| 蜜臀99久久精品久久久| 国产三级精品三级专区| 国产精品三级玖玖玖电影| 亚洲最大成人综合福利网| 国产一区二区黄色在线|