k8s的service簡述


k8s向集群外部暴露端口的3種方式:
1.service->nodePort :僅暴露一個宿主機端口,用於集群外部訪問,因為此操作被寫入各個節點的iptables或ipvs規則當中,可以用任意一個節點的IP+端口號訪問。
2.hostNetwork :暴露宿主機IP,只可以通過此宿主機IP訪問,慎重使用。
3.hostPort->contianerPort :宿主機和容器的端口映射,只能訪問被指定的容器和宿主機。

kbectl的命令可分為三類:
1.陳述式命令-->(指明對象和要求)
2.陳述式對象配置--> create(用json或yaml格式定義我們期望狀態的資源清單)
3.聲明式對象配置--> apply (可以對一個yaml資源清單多次進行apply)

pod相當於容器的有一個外殼,對容器的抽象形成的pod,一個pod可以運行1個到多個容器,並且,同一pod下的容器共享一組網絡名稱空間
pod中即使看上去是運行一個容器,其實不然,它還包括除了這個容器外的基礎架構的容器,當原始方式去部署k8s時,用到的基礎架構的容器對應的鏡像是pause,可以理解為一直是暫停狀態。
pod中基礎架構的容器pause,為此pod中的主要容器主動提供網絡名稱空間,數據卷等功能。
一個pod中通常最好一個主容器。
pod中如果需要實現緊密容器的服務,可以有兩種方式,1,sidecar(邊車,輔助,側兜摩托)2,proxy代理istio
同一pod下的容器能共享掛載卷

1 查看pod標簽:kubectl get pod -n namespace --show-labels
2 Pod添加標簽:kubectl label pod ngx-dep app=myapp / kubectl label pod ngx-dep --overwrite {app=myapp,word=shit,mod=good}
3 Pod刪除標簽:kubectl label pod ngx-dep app- / kubectl label pod ngx-dep word- /kubectl label pod ngx-dep mod-
4 Pod篩選標簽:kubectl get pod -l key / kubectl get pod -l key=value / kubectl get -l key=value -L key / kubectl get pod -l key1,key2,keyn

service的模型:

userspace;iptables;ipvs
1.10-的版本是userspace/iptables
1.10+的版本是iptables/ipvs 一般不指定的話會自動降級到iptables,若想使用ipvs則在搭建環境時需要在/etc/sysconfig/kubelet文件中添加字段為:
KUBE_PROXY_MODE=ipvs
service的解析是緊密依賴於coredns的
service 服務方式:
clusterIP :供集群內布訪問使用
nodeport :供集群外部訪問使用 client->NodeIP:NodePort->clusterIP:servicePort->podIP:ContainerPort
externalIPs :用於使pod訪問集群外部資源
loadBalancerIP :用於雲平台環境中,集群外負載均衡調度
NoclusterIP:即clusterIP:后面參數為空,則為headless,無頭service,就是說這個服務的IP是它所有后端pod的IP:ServiceName->PodIP
clusterIP 例:

 1 apiVersion: v1
 2 kind: Service
 3 metadata:
 4 name: myapp-svc
 5 namespace: default
 6 spec:
 7 selector:
 8 app: myapp
 9 release: canary
10 clusterIP: 10.99.99.99
11 type: ClusterIP
12 ports:
13 - port: 80 #service暴露的端口(iptables/ipvs規則)
14 targetPort: 80 #pod的端口

nodeport 例:

 1 apiVersion: v1
 2 kind: Service
 3 metadata:
 4 name: myapp-svc-headless
 5 namespace: default
 6 spec:
 7 selector:
 8 app: myapp
 9 release: canary
10 clusterIP: 10.97.97.97
11 sessionAffinity: ClientIP #這個選項作用是,把來自於同一個客戶端的請求,始終發往同一個后端pod
12 type: NodePort
13 ports:
14 - port: 80
15 targetPort: 80
16 nodePort: 30080 #工作節點上對外暴露的端口


無頭headless service 例:一般用於對后端pod資源的調度。

 1 apiVersion: v1
 2 kind: Service
 3 metadata:
 4 name: myapp-svc-1
 5 namespace: default
 6 spec:
 7 selector:
 8 app: myapp
 9 release: canary
10 clusterIP: None
11 ports:
12 - port: 80
13 targetPort: 80

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM