|NO.Z.00156|——————————|CloudNative|——|KuberNetes&服務釋出.V07|-------------------------------------------------------|service.v03|建立service|
阿新 • • 發佈:2022-03-30
[CloudNative:KuberNetes&服務釋出.V07] [Applications.KuberNetes] [|DevOps|k8s|服務釋出|在k8s中如何釋出服務|service|使用service代理k8s內部服務|]
一、引入service
二、檢視部署時建立的service和endpoints### --- 什麼是service ~~~ Service可以簡單的理解為邏輯上的一組Pod。 ~~~ 一種可以訪問Pod的策略,而且其他Pod可以通過這個Service訪問到這個Service代理的Pod。 ~~~ 相對於Pod而言,它會有一個固定的名稱,一旦建立就固定不變。 ~~~ 在建立service的時候會同步建立一個同名的EndPoint,這個EndPoint裡面記錄的就是Pod的IP地址
### --- 檢視建立的service [root@k8s-master01 ~]# kubectl get svc -n kube-system NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 10d metrics-server ClusterIP 10.97.177.184 <none> 443/TCP 10d
### --- 檢視建立的endpoints
[root@k8s-master01 ~]# kubectl get ep -n kube-system
NAME ENDPOINTS AGE
kube-dns 172.25.92.65:53,172.25.92.65:53,172.25.92.65:9153 10d
metrics-server 172.18.195.1:4443 10d
三、建立nginx-service.yaml配置檔案### --- 檢視建立的pod [root@k8s-master01 ~]# kubectl get po -n kube-system -owide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES coredns-867d46bfc6-sk5dp 1/1 Running 0 10d 172.25.92.65 k8s-master02 <none> <none> metrics-server-595f65d8d5-slhtd 1/1 Running 1 10d 172.18.195.1 k8s-master03 <none> <none>
### --- 匯出service歷史建立模板更改配置引數
~~~ 假設新建一個service驗證:可以使用正在執行的service,匯出來yaml檔案,建立即可
[root@k8s-master01 ~]# kubectl get svc -n kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 10d
metrics-server ClusterIP 10.97.177.184 <none> 443/TCP 10d
### --- 匯出歷史service模板
[root@k8s-master01 ~]# kubectl get svc -n kube-system kube-dns -oyaml > nginx-svc.yaml
### --- 更改配置引數
[root@k8s-master01 ~]# vim nginx-svc.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx-svc
name: nginx-svc
spec:
ports:
- name: http # Service埠的名稱
port: 80 # Service自己的埠, servicea --> serviceb http://serviceb, http://serviceb:8080
protocol: TCP # UDP TCP SCTP default: TCP
targetPort: 80 # 後端應用的埠
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
sessionAffinity: None
type: ClusterIP
### --- service配置檔案引數說明
~~~ # 註釋說明;
~~~ clusterIP:在配置的時候不要寫clusterIP,因為clusterIP也是自己去生成的,他和我們Pod的IP是一樣的,這個地址不要手動去配置,自動配置有可能會衝突,所以建立service的時候讓他自己去生成。而且服務間訪問不要使用這個clusterIP,clusterIP在刪除service之後就會發生變化。
~~~ ports:spec下的ports;是你的service中要開放的埠,開放的埠包括2個,一個是service自己的埠,另外一個是service代理後端的後端應用的埠,這個是要做一個區分的。埠若是配置多個的話,是不要重複的。最好是按照這個埠的用途來區分的。比如說是nginx
~~~ targetPort:是後端應用的埠。這兩個埠是可以不一樣的。但是targetPort埠一定要寫對,不然可能會導致不通。
~~~ name:根據他的屬性來命名,不要隨便寫。需要認識是什麼引數
~~~ 他所代理的Pod是誰,就是通過這個selector來定義的,它是通過這個selector來過濾出來本身namespace下的這個Pod,這個service是有namespace隔離的。
[root@k8s-master01 ~]# vim nginx-svc.yaml
selector:
app: nginx
sessionAffinity: None
type: ClusterIP
### --- 檢視建立pod所建立的label
~~~ 可以看到這2個Pod的標籤是app=nginx,和上面的selector下的app:標籤保持一致即可。
~~~ 這樣這個service就可以代理這兩個pod的流量了。
[root@k8s-master01 ~]# kubectl get po --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-66bbc9fdc5-jnzhz 1/1 Running 0 7m37s app=nginx,pod-template-hash=66bbc9fdc5
nginx-66bbc9fdc5-vhq59 1/1 Running 0 7m37s app=nginx,pod-template-hash=66bbc9fdc5
四、建立service;使用service代理k8s內部應用
### --- 建立一個service
[root@k8s-master01 ~]# kubectl create -f nginx-svc.yaml
service/nginx-svc created
### --- 檢視建立的service
~~~ 這個建立的service的IP地址是10.101.145.83 代理的後端應用的埠是80和443
[root@k8s-master01 ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-svc ClusterIP 10.101.145.83 <none> 80/TCP,443/TCP 4s
===============================END===============================
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart ——W.S.Landor
來自為知筆記(Wiz)