寧波seo推廣優(yōu)化提升seo排名
K8s? service (二)
Endpoint
Endpoint是kubernetes中的一個資源對象,存儲在etcd中,用來記錄一個service對應的所有pod訪問地址,它是根據(jù)service匹配文件中selector描述產生的。
一個Service由一組Pod組成,這些Pod通過Endpoints暴露出來,Endpoints是實現(xiàn)是服務的端點集合。換句話說,service和pod之間的聯(lián)系是通過endpoints實現(xiàn)的。
[root@master ~]# kubectl get endpoints -n dev -o wide
NAME????????????????????????? ENDPOINTS?????????????????????????????????????????????????????????? ?????? AGE
service-clusterip?? 10.244.1.39:80,10.244.1.40:80,10.244.2.33:80?? ??????????? 50m
HeadLiness類型的Service (幾乎不會用于生產)
在某些場景中,開發(fā)人員可能不想使用Service提供的負載均衡功能,而希望自己來控制負載均衡策略,針對這個中情況,kubernetes提供了HeadLiness Service,這類Service不會分配ClusterIP,如果想要訪問service,只能通過service的域名進行查詢。
創(chuàng)建service-headliness.yaml
apiVersion: v1
kind: Service
metadata:
? name: service-headliness?
? namespace: dev
spec:
? selector:
??? app: nginx-pod
? clusterIP: None?????????????????????? #將clusterIP設置為None,即可創(chuàng)建headliness Service
? type: ClusterIP?
? ports:?
? - port: 80
targetPort: 80
# 創(chuàng)建service[root@master ~]# kubectl create -f service-headliness.yaml
service/service-headliness created
# 獲取service,發(fā)現(xiàn)CLUSTER-IP未分配
[root@master ~]# kubectl get svc service-headliness -n dev -o wide
NAME????????????????????????? TYPE???????????? CLUSTER-IP?? EXTERNAL-IP??????? PORT(S)?????? AGE??????? SELECTOR
service-headliness ClusterIP None???????????? <none>??????????????? 80/TCP?? 11s? ?????? app=nginx-pod
# 查看service詳情
[root@master ~]# kubectl describe svc service-headliness -n dev -o -wide
Name:?????????????????????????????????????? service-headliness
Namespace:????????????????????????????? dev
Labels:?????????????????????????????????????? <none>
Annotations:?????????????????????? <none>
Selector:???????????????????????????? app=nginx-pod
Type:???????????????????????????????????????? ClusterIP
IP:???????????????????????????????????????????? None
Port:????????????????????????????????????????? <unset> 80/TCP
TargetPort:??????????????????????????????? 80/TCP
Endpoints:???????????????????????????????? 10.244.1.39:80,10.244.1.40:80,10.244.2.33:80
Session Affinity:????????????????? None
Events:????????????????????????????????????? <none>
# 查看域名的解析情況
[root@master ~]# kubectl exec -it pc-deployment-66cb59b984-8p84h -n dev /bin/sh/
# cat /etc/resolv.confnameserver
10.96.0.10
search dev.svc.cluster.local svc.cluster.local cluster.local
# 如果本機沒有dig,需要安裝dig工具
[root@master ~]#? yum -y install bind-utils
[root@master ~]# dig @10.96.0.10 service-headlilness.dev.svc.cluster.local
service-headliness.dev.svc.cluster.local. 30 IN A 10.244.1.40
service-headliness.dev.svc.cluster.local. 30 IN A 10.244.1.39
service-headliness.dev.svc.cluster.local. 30 IN A 10.244.2.33
Nodeport 類型的service
在之前的樣例中,創(chuàng)建的Service的ip地址只有集群內部才可以訪問,如果希望將Service暴露給集群外部使用,那么就要使用到另外一種類型Service,稱為NodePort類型。NodePort的工作原理其實就是將service的端口映射到Node的一個端口上,然后就可以通過NodeIp:NodePort來訪問service了。
創(chuàng)建service-nodeport.yaml
apiVersion: v1
kind: Service
metadata:
? name: service-nodeport?
? namespace: dev
spec:
? selector:
??? app: nginx-pod?
? type: NodePort???????? # Service類型?
? ports:?
? - port: 80???
??? nodePort: 30002????????? # 指定綁定的node的端口(默認取值范圍是:30000-32767),#如果不指定,會默認分配???
??? targetPort: 80