k8s用命名空間namespace把資源進行隔離,默認(rèn)情況下,相同的命名空間里的服務(wù)可以相互通訊,反之進行隔離。

          服務(wù)Service

          1.1 Service


          Kubernetes中一個應(yīng)用服務(wù)會有一個或多個實例(Pod,Pod可以通過rs進行多復(fù)本的建立),每個實例(Pod)的IP地址由網(wǎng)絡(luò)插件動態(tài)隨機分配(Pod重啟后IP地址會改變)。為屏蔽這些后端實例的動態(tài)變化和對多實例的負(fù)載均衡,引入了Service這個資源對象,如下所示:
          apiVersion: v1 kind: Service metadata: name: nginx-svc labels: app: nginx
          spec: type: ClusterIP ports: - port: 80 targetPort: 80 selector:
          #service通過selector和pod建立關(guān)聯(lián) app: nginx
          根據(jù)創(chuàng)建Service的type類型不同,可分成4種模式:

          * ClusterIP: 默認(rèn)方式。根據(jù)是否生成ClusterIP又可分為普通Service和Headless Service兩類:
          * 普通Service:通過為Kubernetes的Service分配一個集群內(nèi)部可訪問的固定虛擬IP(Cluster
          IP),實現(xiàn)集群內(nèi)的訪問。為最常見的方式。
          * Headless Service:該服務(wù)不會分配Cluster
          IP,也不通過kube-proxy做反向代理和負(fù)載均衡。而是通過DNS提供穩(wěn)定的絡(luò)ID來訪問,DNS會將headless
          service的后端直接解析為podIP列表。主要供StatefulSet使用。
          * NodePort:除了使用Cluster
          IP之外,還通過將service的port映射到集群內(nèi)每個節(jié)點的相同一個端口,實現(xiàn)通過nodeIP:nodePort從集群外訪問服務(wù)。
          * LoadBalancer:和nodePort類似,不過除了使用一個Cluster
          IP和nodePort之外,還會向所使用的公有云申請一個負(fù)載均衡器(負(fù)載均衡器后端映射到各節(jié)點的nodePort),實現(xiàn)從集群外通過LB訪問服務(wù)。
          * ExternalName:是 Service
          的特例。此模式主要面向運行在集群外部的服務(wù),通過它可以將外部服務(wù)映射進k8s集群,且具備k8s內(nèi)服務(wù)的一些特征(如具備namespace等屬性),來為集群內(nèi)部提供服務(wù)。此模式要求kube-dns的版本為1.7或以上。這種模式和前三種模式(除headless
          service)最大的不同是重定向依賴的是dns層次,而不是通過kube-proxy。
          比如,在service定義中指定externalName的值"my.database.example.com":
          此時k8s集群內(nèi)的DNS服務(wù)會給集群內(nèi)的服務(wù)名 ..svc.cluster.local
          創(chuàng)建一個CNAME記錄,其值為指定的"my.database.example.com"。
          當(dāng)查詢k8s集群內(nèi)的服務(wù)my-service.prod.svc.cluster.local時,集群的 DNS
          服務(wù)將返回映射的CNAME記錄"foo.bar.example.com"。

          備注:
          前3種模式,定義服務(wù)的時候通過selector指定服務(wù)對應(yīng)的pods,根據(jù)pods的地址創(chuàng)建出endpoints作為服務(wù)后端;Endpoints
          Controller會watch
          Service以及pod的變化,維護對應(yīng)的Endpoint信息。kube-proxy根據(jù)Service和Endpoint來維護本地的路由規(guī)則。當(dāng)Endpoint發(fā)生變化,即Service以及關(guān)聯(lián)的pod發(fā)生變化,kube-proxy都會在每個節(jié)點上更新iptables,實現(xiàn)一層負(fù)載均衡。
          而ExternalName模式則不指定selector,相應(yīng)的也就沒有port和endpoints。
          ExternalName和ClusterIP中的Headles Service同屬于Headless Service的兩種情況。Headless
          Service主要是指不分配Service IP,且不通過kube-proxy做反向代理和負(fù)載均衡的服務(wù)。

          1.2 Port

          Service中主要涉及三種Port: * port 這里的port表示service暴露在clusterIP上的端口,clusterIP:Port
          是提供給集群內(nèi)部訪問kubernetes服務(wù)的入口。

          *
          targetPort

          containerPort,targetPort是pod上的端口,從port和nodePort上到來的數(shù)據(jù)最終經(jīng)過kube-proxy流入到后端pod的targetPort上進入容器。

          *
          nodePort
          nodeIP:nodePort 是提供給從集群外部訪問kubernetes服務(wù)的入口。


          總的來說,port和nodePort都是service的端口,前者暴露給從集群內(nèi)訪問服務(wù),后者暴露給從集群外訪問服務(wù)。從這兩個端口到來的數(shù)據(jù)都需要經(jīng)過反向代理kube-proxy流入后端具體pod的targetPort,從而進入到pod上的容器內(nèi)。

          1.3 IP

          使用Service服務(wù)還會涉及到幾種IP:

          *
          ClusterIP
          Pod IP
          地址是實際存在于某個網(wǎng)卡(可以是虛擬設(shè)備)上的,但clusterIP就不一樣了,沒有網(wǎng)絡(luò)設(shè)備承載這個地址。它是一個虛擬地址,由kube-proxy使用iptables規(guī)則重新定向到其本地端口,再均衡到后端Pod。當(dāng)kube-proxy發(fā)現(xiàn)一個新的service后,它會在本地節(jié)點打開一個任意端口,創(chuàng)建相應(yīng)的iptables規(guī)則,重定向服務(wù)的clusterIP和port到這個新建的端口,開始接受到達這個服務(wù)的連接。

          *
          Pod IP

          Pod的IP,每個Pod啟動時,會自動創(chuàng)建一個鏡像為gcr.io/google_containers/pause的容器,Pod內(nèi)部其他容器的網(wǎng)絡(luò)模式使用container模式,并指定為pause容器的ID,即:network_mode:
          "container:pause容器ID",使得Pod內(nèi)所有容器共享pause容器的網(wǎng)絡(luò),與外部的通信經(jīng)由此容器代理,pause容器的IP也可以稱為Pod
          IP。

          *
          節(jié)點IP
          Node-IP,service對象在Cluster IP
          range池中分配到的IP只能在內(nèi)部訪問,如果服務(wù)作為一個應(yīng)用程序內(nèi)部的層次,還是很合適的。如果這個service作為前端服務(wù),準(zhǔn)備為集群外的客戶提供業(yè)務(wù),我們就需要給這個服務(wù)提供公共IP了。指定service的spec.type=NodePort,這個類型的service,系統(tǒng)會給它在集群的各個代理節(jié)點上分配一個節(jié)點級別的端口,能訪問到代理節(jié)點的客戶端都能訪問這個端口,從而訪問到服務(wù)。

          友情鏈接
          ioDraw流程圖
          API參考文檔
          OK工具箱
          云服務(wù)器優(yōu)惠
          阿里云優(yōu)惠券
          騰訊云優(yōu)惠券
          京東云優(yōu)惠券
          站點信息
          問題反饋
          郵箱:[email protected]
          QQ群:637538335
          關(guān)注微信

                在健身房里啪啪嗯受不了了 | 在线内射 | 精品亚洲7777 | 日批视频网址 | 一级A片60分钟免费看 |