CC00157.CloudKubernetes——|KuberNetes服务发布.V08|——|service.v04|验证service|
### --- 验证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容器[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的访问呢?
~~~ # 查看创建的容器[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.13nodeName: k8s-node01- ip: 172.18.195.18nodeName: k8s-master03
### --- 查看定义的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.83clusterIPs:- 10.101.145.83ports:- name: httpport: 80 // 这个是service的端口是80protocol: TCPtargetPort: 80 // 这个是service下pod容器启用的端口号- name: httpsport: 443protocol: TCPtargetPort: 443selector: // 这个selector:通过selector查找出当前namespace下的pod,过滤出这个pod之后,会根据这个pod的IP地址生成我们的ep,刷新我们的epapp: nginxsessionAffinity: Ntype: 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
CC00157.CloudKubernetes——|KuberNetes服务发布.V08|——|service.v04|验证service|相关推荐
- CC00167.CloudKubernetes——|KuberNetes服务发布.V18|——|HPA.v01|资源查看|
一.HPA概述 ### --- 什么是HPA~~~ Horizontal Pod Autoscaler:Pod的水平自动伸缩器. ~~~ 观察Pod的CPU.内存使用率自动扩展或缩容Pod的数量. ~ ...
- CC00307.CloudKubernetes——|KuberNetes运维.V27|——|监控.v04|PromQL查询_运算符|
一.运算符: ### --- 集合运算:~~~ 集合运算:and ,or,unless ### --- OR:查找小于等于2977,并且等于2977.7890625:or:~~~ 并列关系,前面符合后 ...
- 15分钟在阿里云Kubernetes服务上快速建立Jenkins X Platform并运用GitOps管理应用发布...
本文主要介绍如何在阿里云容器服务Kubernetes上快速安装部署Jenkins X Platform并结合demo实践演示GitOps的操作流程. 注意: 本文中使用的jx工具.cloud-envi ...
- 自动化运维之k8s——Kubernetes集群部署、pod、service微服务、kubernetes网络通信
目录 一.Kubernetes简介 1.Kubernetes简介 2.kubernetes设计架构 3.Kubernetes核心组件 4.kubernetes设计结构 二.Kubernetes部署 1 ...
- 阿里云Kubernetes服务上使用Tekton完成应用发布初体验
Tekton 是一个功能强大且灵活的 Kubernetes 原生开源框架,用于创建持续集成和交付(CI/CD)系统.通过抽象底层实现细节,用户可以跨多云平台和本地系统进行构建.测试和部署. 本文是基于 ...
- Kubernetes系列之五:使用yaml文件创建service向外暴露服务
系列链接 Kubernetes系列之一:在Ubuntu上快速搭建一个集群Demo Kubernetes系列之二:将Slave节点加入集群 Kubernetes系列之三:部署你的第一个应用程序到k8s集 ...
- AKS==donet6代码生成镜像到dockerhub并发布到Azure Kubernetes 服务 (AKS)
将微服务部署到 Azure Kubernetes 服务 (AKS) 实践_dotNET跨平台的博客-CSDN博客 将微服务部署到 Azure Kubernetes 服务 (AKS) 实践_dotNET ...
- Kubernetes K8S在IPVS代理模式下Service服务的ClusterIP类型访问失败处理
Kubernetes K8S使用IPVS代理模式,当Service的类型为ClusterIP时,如何处理访问service却不能访问后端pod的情况. 背景现象 Kubernetes K8S使用IPV ...
- 微软发布多项Azure Kubernetes服务更新,增加GPU支持
微软宣布对他们托管的Azure Kubernetes服务进行多项更新.更新公告中包括AKS虚拟节点的特性更新.对Azure容器实例的GPU支持以及将Virtual Kubelet项目捐赠给原生云计算基 ...
最新文章
- 『求助』请求服务器超时或失败问题
- 全球三大芯片架构之一MIPS倒下!转身投入RISC-V阵营
- TCP/IP详解学习笔记(13)-TCP坚持定时器,TCP保活定时器
- OSX 使用“终端”远程登录linux主机
- QT实现Media Player(媒体播放器)
- CSS Hack(Safari、Opera、Chrome、IE6、IE7、 IE8和IE9)
- APP自动化测试系列之获取Android的Activity 和 Package
- micropython入门教程-【ESP8266】MicroPython的快速入门教程
- 利用MapShaper将.shp文件转换成JSON文件
- java 行政区划代码 民政部 json
- LINUX 用户 及 组
- Unity Translate方法使用指南
- 区块链加持的家用摄像头能拯救你的隐私吗?
- 第一部份1:JMF基础原理与相关术语介绍 。。。。快速了解JMF有什么相关内容
- elementui级联选择器
- 【台大郭彦甫】Matlab入门教程超详细学习笔记二:基本操作与矩阵运算(附PPT链接)
- 第十二届蓝桥杯大赛软件赛省赛C/C++ B组真题解析
- 4417. 神奇的字符串
- FreeSWITCH学习笔记 第二场 第二个镜头 JsSIP视频通讯
- 用do…while循环按公式e=计算 e 的值(精度为 1e-6)