中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

k8s集群中的service

發布時間:2020-07-11 11:33:24 來源:網絡 閱讀:1472 作者:dongyali521521 欄目:云計算

k8s集群內部服務發現的方式有兩種:
1、通過變量發現
只能獲取相同namespace里的變量
變量的獲取有先后順序,引用的變量必須要先創建
2、通過DNS的方式發現
在kube-system里有dns,可以自動發現所有命名空間里的服務的clusterIP
所以,在同一個命名空間里,一個服務訪問另外一個服務的時候,可以直接通過服務名來訪問
只要創建了一個服務(不管在哪個ns里創建的),都會自動向kube-system里的DNS注冊
如果是不同的命名空間,可以通過 服務名.命名空間名 來訪問

Service是一種抽象的對象,它定義了一組Pod的邏輯集合和一個用于訪問它們的策略。
service主要實現集群內部通信,以及基于四層的內外通信(如端口)。
service用于為pod提供一個固定,統一的訪問接口及負載均衡的能力,并借助新一代DNS的服務發現功能,解決客戶端發現并訪問容器化應用的難題。
service的地址是不會發生改變的,它通過標簽選擇器和后端的pod關聯。
k8s集群中的3種ip:
1、Node IP:Node節點的IP地址
2、Pod IP: Pod的IP地址
3、Cluster IP: Service的IP地址,不能ping通

k8s集群中的service類型
$ kubectl explain svc.spec.type
Defaults to ClusterIP. Valid options are ExternalName, ClusterIP, NodePort, and LoadBalancer.
不使用type字段的話,默認就是ClusterIP類型
1、ClusterIP:通過集群的內部 IP 暴露服務,選擇該值,服務只能夠在集群內部可以訪問,這也是默認的ServiceType。
k8s集群內部流量走向:
內部客戶端--service(ClussterIp:Port)--endpoint(ip和port列表)--應用pod(port)
2、NodePort:通過每個 Node 節點上的 IP 和靜態端口(NodePort)暴露服務。NodePort 服務會路由到 ClusterIP 服務,這個 ClusterIP 服務會自動創建。通過請求 :,可以從集群的外部訪問一個 NodePort 服務。
NodePort類型的service數據流向:
外部用戶--外部LB--nodePort(集群入口)--service--endpoint--應用pod
3、LoadBalancer類型的service應用在公有云環境中
4、ExternalName類型的service用于實現集群內部pod訪問集群外部的服務
數據流向:內部pod--service--外部服務
該類型的service沒有serviceIP,沒有nodeport,沒有標簽選擇器,需要CNAME解析記錄

完成內部流量轉發工作的是各工作節點的kube-proxy
proxy工作模式有3種:
1、userspace代理模式
2、iptables代理模式
3、ipvs代理模式
ipvs模式和iptables模式的區別僅僅是:請求流量的調度功能由ipvs完成,其他功能仍由iptables完成

創建service的兩種方式:
1、使用kubectl expose命令
2、定義資源清單文件

$ kubectl explain svc.metadata
FIELDS:
labels
name #svc的名字
namespace
$ kubectl explain svc.spec
FIELDS:
clusterIP #svc的ip地址
ports
selector
type

$ kubectl explain svc.spec.clusterIP
clusterIP is the IP address of the service and is usually assigned randomly by the master.
Valid values are "None", empty string (""), or a valid IP address.
"None" can be specified for headless services when proxying is not required.
Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName.
clusterIP表示svc的ip地址,一般自動獲取,不用手動指定。如果不使用該字段或者指定其值為空,都表示自動獲取ip地址。
如果指定其值為None,表示該svc是無頭服務。
當svc的type是ExternalName時,不能使用該字段。

$ kubectl explain svc.spec.ports
FIELDS:
1、port:
指該service暴露的端口,用yaml文件創建svc時是必選項,用命令創建時可以不指定,如果不指定,會繼承pod中的containerPort。
2、nodePort:
指node節點端口(只有當type為NodePort或LoadBalancer時才需要該參數,一般自動生成),用于對外通信。
3、targetPort:
指后端pod暴露的端口,就是pod中的containerPort。
如果既不指定port又不指定targetPort,那么port和targetPort都會繼承pod中的containerPort。
如果指定了port而沒有指定targetPort,那么targetPort會繼承port值,所以此時必須指定targetPort值為pod中的containerPort,不能隨便指定端口號,除非port值和pod中的containerPort相同(這種情況可以不指定targetPort)。

當type為ClusterIP時,流量經過的端口走向是:
svc端口(port)----pod端口(targetPort)----容器端口(containerPort)
當type為NodePort時,流量經過的端口走向是:
節點端口(NodePort)----svc端口(port)----pod端口(targetPort)----容器端口(containerPort)

使用命令創建svc(containerPort是8080)
$ kubectl get deploy
$ kubectl expose deploy deploy_name1
$ kubectl get svc
$ kubectl delete svc svc_name
$ kubectl expose deploy deploy_name2 --port=8080
$ kubectl expose deploy deploy_name3--port=80 --target-port=8080
$ kubectl expose deploy deploy_name4 --port=80 --target-port=8080 --type=NodePort
$ kubectl get svc svc_name -o yaml

spec:
  clusterIP: 10.97.153.130
  externalTrafficPolicy: Cluster
  ports:
  - nodePort: 30693
    port: 80
    protocol: TCP
    targetPort: 8080

$ curl http://10.97.153.130
$ curl http://192.168.1.243:30693 #243是master地址
$ kubectl delete svc svc_name

用yaml文件創建svc

apiVersion: v1
kind: Service
metadata:
  labels:
    ame: mysvc
  name: mysvc
spec:
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: mysvc        #匹配標簽為app: mysvc的后端pod
  type: NodePort

Headless無頭類型的service:
該service沒有IP,客戶端不經過service,而是直接訪問后端的pod
無頭服務的type不能是NodePort。

kind: Service
spec:
  clusterIP: None    #(該參數設置為None即可成為無頭service)

查看某個服務下有哪些pod:
$ kubectl get svc
$ kubectl get svc svc_name -o yaml
$ kubectl describe svc svc_name
Selector: run=nginx1
$ kubectl get pod -l run=nginx1

驗證通過DNS發現服務
$ kubectl get pod -n kube-system |grep dns
kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP
$ yum install bind-utils -y
$ dig -t A svc_name.default.svc.cluster.local. @10.96.0.10
$ kubectl get svc svc_name -o yaml
在pod中驗證dns服務發現
$ kubectl run busybox --rm -it --image=busybox sh
/ # cat /etc/resolv.conf
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local example.com

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广东省| 突泉县| 双桥区| 化州市| 盐池县| 石景山区| 静乐县| 五台县| 黔西| 昭平县| 娄底市| 蛟河市| 军事| 六盘水市| 玉山县| 安平县| 桂林市| 平山县| 怀宁县| 定西市| 黄大仙区| 惠安县| 咸宁市| 邻水| 龙州县| 息烽县| 子洲县| 扶风县| 甘谷县| 平江县| 白城市| 沾化县| 庆安县| 镇原县| 永康市| 康平县| 泾川县| 长泰县| 昆明市| 湘西| 商城县|