CC00157.CloudKubernetes——|KuberNetes&服务发布.V08|——|service.v04|验证service|

一、验证创建的service是否代理到pod上
### --- 验证service是否代理到对应的pod上
~~~     查看创建的pod及service地址

[root@k8s-master01 ~]# kubectl get po -owide
NAME                     READY   STATUS    RESTARTS   AGE   IP               NODE           NOMINATED NODE   READINESS GATES
busybox                  1/1     Running   9          19h   172.25.244.211   k8s-master01   <none>           <none>
nginx-66bbc9fdc5-jnzhz   1/1     Running   0          11m   172.18.195.17    k8s-master03   <none>           <none>
nginx-66bbc9fdc5-vhq59   1/1     Running   0          11m   172.25.244.214   k8s-master01   <none>           <none>
[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
### --- 在同一namespace下去验证通过service访问pod
~~~     那么我们就可以通过clusterIP访问到应用,但是我们是不建议使用clusterIP反问应用的,
~~~     我们建议是使用service的name去访问

[root@k8s-master01 ~]# curl 172.18.195.17                       // 通过pod的地址是可以访问到pod的页面内容的
<title>Welcome to nginx!</title> 
[root@k8s-master01 ~]# curl 10.101.145.83                       // 也可以通过service的clusterIP访问到pod的页面的内容
<title>Welcome to nginx!</title>
[root@k8s-master01 ~]# kubectl logs -f nginx-66bbc9fdc5-jnzhz   // 查看日志可以看到有人已经请求它的根路径了。
172.25.244.192 - - [20/Apr/2021:10:46:43 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"
172.25.244.192 - - [20/Apr/2021:10:47:17 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"
二、登录busybox容器验证
### --- 登录busybox容器

[root@k8s-master01 ~]# kubectl exec -ti busybox -- sh   // 登入busybox访问该页面验证
/ # wget http://nginx-svc                               // 访问service名称
Connecting to nginx-svc (10.101.145.83:80)
index.html           100% |*************************************************************************************************************************************|   612   0:00:00 ETA
/ # cat index.html 
<title>Welcome to nginx!</title>
### --- 跨namespace访问这个service下的pod:需要加上namespace的名称;
~~~     # 假设这个service不在default的命名空间下,我们该怎么去访问?

~~~     什么情况下需要用到跨namespace调用呢?
~~~     一般情况下:应用之间的调用不要使用跨namespace,因为它很容易形成一个网状结构的网络,很不好处理
~~~     使用到情况:假设我们有一个中间件,比如说Redis,这个Redis可能会跟很多项目去共用数据,
~~~     这个项目可能部署在好几个namespace下,这个namespace去访问公共的Redis,
~~~     那么我们就可以把这个中间件或Redis单独的找一个namespace存放,
~~~     可以为其它的namespace调用。这样就可以使用跨namespace去调用。
/ # wget http://nginx-svc.default                       // 若是跨namespace需要加上.default
Connecting to nginx-svc.default (10.101.145.83:80)      
index.html           100% |*************************************************************************************************************************************|   612   0:00:00 ETA
/ # cat index.html 
<title>Welcome to nginx!</title>
三、通过service去访问这个pod的话,这个pod的后端有变化的话;会不会影响到这个service的访问呢?
### --- 通过service去访问这个pod的话,这个pod的后端有变化的话;
~~~     会不会影响到这个service的访问呢?
~~~     # 查看创建的容器

[root@k8s-master01 ~]# kubectl get po
NAME                     READY   STATUS    RESTARTS   AGE
nginx-66bbc9fdc5-jnzhz   1/1     Running   0          27m
nginx-66bbc9fdc5-vhq59   1/1     Running   0          27m
~~~     # 删除重启,重启容器

[root@k8s-master01 ~]# kubectl delete po nginx-66bbc9fdc5-jnzhz  nginx-66bbc9fdc5-vhq59
pod "nginx-66bbc9fdc5-jnzhz" deleted
pod "nginx-66bbc9fdc5-vhq59" deleted
~~~     # 查看重启的容器,IP地址发生变化
~~~     删除之前的两个pod,删除之后这两个pod会重建,重建之后它的IP地址会发生变化,
~~~     那么此刻我们还能不能通过service名去访问到我们需要的资源呢?

[root@k8s-master01 ~]# kubectl get po -owide
NAME                     READY   STATUS    RESTARTS   AGE    IP               NODE           NOMINATED NODE   READINESS GATES
busybox                  1/1     Running   10         20h    172.25.244.211   k8s-master01   <none>           <none>
nginx-66bbc9fdc5-mdlr5   1/1     Running   0          119s   172.25.244.215   k8s-master01   <none>           <none>
nginx-66bbc9fdc5-rsxpd   1/1     Running   0          118s   172.18.195.18    k8s-master03   <none>           <none>
### --- 验证通过busybox是否可以正常访问到数据

~~~     # 进入到busybox容器访问获取数据
[root@k8s-master01 ~]# kubectl exec -ti busybox -- sh
/ # wget http://nginx-svc                                                           //也是可以访问到的
Connecting to nginx-svc (10.101.145.83:80)
index.html           100% |*************************************************************************************************************************************|   612   0:00:00 ETA
~~~     # 查看service地址及pod地址对应的endpoints
~~~     可以看到它把重建后的地址更新到service针对的ep中。

[root@k8s-master01 ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP          10d
nginx-svc    ClusterIP   10.101.145.83   <none>        80/TCP,443/TCP   28m
[root@k8s-master01 ~]# kubectl get ep
NAME         ENDPOINTS                                                           AGE
kubernetes   192.168.1.11:6443,192.168.1.12:6443,192.168.1.13:6443               10d
nginx-svc    172.18.195.18:443,172.25.244.215:443,172.18.195.18:80 + 1 more...   28m
### --- 删除一个容器,查看service对应的yaml变化

~~~     # 删除一个pod,查看service的yaml文件的变化
[root@k8s-master01 ~]# kubectl get po -owide
NAME                     READY   STATUS    RESTARTS   AGE    IP               NODE           NOMINATED NODE   READINESS GATES
nginx-66bbc9fdc5-mdlr5   1/1     Running   0          119s   172.25.244.215   k8s-master01   <none>  
[root@k8s-master01 ~]# kubectl delete po nginx-66bbc9fdc5-mdlr5 
pod "nginx-66bbc9fdc5-mdlr5" deleted
[root@k8s-master01 ~]# kubectl get po -owide        // 新启的这个Pod的地址是13
NAME                     READY   STATUS    RESTARTS   AGE     IP               NODE           NOMINATED NODE   READINESS GATES
nginx-66bbc9fdc5-766d9   1/1     Running   0          67s     172.17.125.13    k8s-node01     <none>
~~~     # 查看service对应的endpoints变化
~~~     所以说我们不需要关系service后端应用到底产生了什么样的变化,而是直接可以访问到我们的应用,
~~~     而且service的名称会更可靠,而且会更有稳定性。
~~~     服务之间的调用使用service的名称去调用,不要使用clusterIP地址去调用。
 
[root@k8s-master01 ~]# kubectl get ep nginx-svc -oyaml                              //可以看到之前的Pod的地址已经不见了,更新为新的Pod的地址    
subsets:
- addresses:
  - ip: 172.17.125.13
    nodeName: k8s-node01
  - ip: 172.18.195.18
    nodeName: k8s-master03
四、查看定义的service.yaml
### --- 查看定义的service.yaml配置文件
~~~     # 查看创建的service.pod

[root@k8s-master01 ~]# kubectl get svc nginx-svc
NAME        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
nginx-svc   ClusterIP   10.101.145.83   <none>        80/TCP,443/TCP   19h
~~~     # 查看service.yaml配置文件
~~~     可以看到这个service定义了2个Pod,这两个pod里面一个是http的一个是https的,

[root@k8s-master01 ~]# kubectl get svc nginx-svc -oyaml
spec:
  clusterIP: 10.101.145.83
  clusterIPs:
  - 10.101.145.83
  ports:
  - name: http
    port: 80                                       // 这个是service的端口是80
    protocol: TCP
    targetPort: 80                                 // 这个是service下pod容器启用的端口号
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:                                        // 这个selector:通过selector查找出当前namespace下的pod,过滤出这个pod之后,会根据这个pod的IP地址生成我们的ep,刷新我们的ep
    app: nginx
  sessionAffinity: N
  type: ClusterIP
status:
  loadBalancer: {}
### --- 查看创建的service文件中包含的pod地址及endpoints地址是否一致
~~~     # 查看创建的pod地址

[root@k8s-master01 ~]# kubectl get po -l app=nginx -owide
NAME                     READY   STATUS    RESTARTS   AGE   IP              NODE           NOMINATED NODE   READINESS GATES
nginx-66bbc9fdc5-766d9   1/1     Running   0          19h   172.17.125.13   k8s-node01     <none>           <none>
nginx-66bbc9fdc5-rsxpd   1/1     Running   0          19h   172.18.195.18   k8s-master03   <none>           <none>
~~~     # 查看创建的endpoints下pod地址
~~~     这种是k8s下最常用的应用,去访问我们k8s中内部的应用需求的。

[root@k8s-master01 ~]# kubectl get ep nginx-svc
NAME        ENDPOINTS                                                          AGE
nginx-svc   172.17.125.13:443,172.18.195.18:443,172.17.125.13:80 + 1 more...   19h
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yanqi_vip

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值