|NO.Z.00156|——————————|CloudNative|——|KuberNetes&服务发布.V07|——|service.v03|创建service|

一、引入service
### --- 什么是service

~~~     Service可以简单的理解为逻辑上的一组Pod。
~~~     一种可以访问Pod的策略,而且其他Pod可以通过这个Service访问到这个Service代理的Pod。
~~~     相对于Pod而言,它会有一个固定的名称,一旦创建就固定不变。
~~~     在创建service的时候会同步创建一个同名的EndPoint,这个EndPoint里面记录的就是Pod的IP地址
二、查看部署时创建的service和endpoints
### --- 查看创建的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
### --- 查看创建的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>
三、创建nginx-service.yaml配置文件
### --- 导出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     代理的后端应用的端口是80443

[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

 
 
 
 
 
 
 
 
 

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

 

 

posted on   yanqi_vip  阅读(29)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示