前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >kubernetes内部访问服务的方式

kubernetes内部访问服务的方式

作者头像
千灵域
发布2022-06-17 12:47:21
7970
发布2022-06-17 12:47:21
举报
文章被收录于专栏:challenge filter

最近因为实验室集群整体爆炸,需要修改旧服务器的网络配置。为此,需要进行一系列的网络测试。同时,这也是一个新的label系列。总是有一些代码,非常常用,但是用的时候就是找不到,想也想不起来,就非得去查。很难受。

之前做网络测试的手段太原始了(指新建ubuntu容器后登陆进去),不够灵活方便,而且也找不到代码和镜像了。为此,我总结了几个比较好的快速访问方式

方式1

最直接的方式肯定是登陆进服务内部,比如istio中提到的

在执行命令后:kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml,如果此时所有的svc和pods都跑起来了,可以通过运行kubectl exec -it $(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}') -c ratings -- curl productpage:9080/productpage | grep -o "<title>.*</title>"来检测到结果。

其中的kubectl exec -it可以登陆容器并打开控制台,而服务的名称由$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')-c参数保证了在存在注入的情况下能正常运行。

--连接两条不同的命令,后面就不需要过多的解释了。

甚至不一定是同一个镜像,比如使用sleep镜像进行(足够小)

代码语言:javascript
复制
export SLEEP_POD=$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})#这里要自行加上-n=test
kubectl exec -it $SLEEP_POD -c sleep curl http://ratings.default.svc.cluster.local:9080/ratings/1
{"id":1,"ratings":{"Reviewer1":5,"Reviewer2":4}}

方式2

临时开一个curl镜像进行网络检查

官方在httpbin里也展示了如何通过curl镜像来进行内网测试(同样,注意命名空间)

代码语言:javascript
复制
kubectl run -i --rm --restart=Never dummy --image=dockerqa/curl:ubuntu-trusty --command -- curl --silent httpbin:8000/html
kubectl run -i --rm --restart=Never dummy --image=dockerqa/curl:ubuntu-trusty --command -- curl --silent --head httpbin:8000/status/500
time kubectl run -i --rm --restart=Never dummy --image=dockerqa/curl:ubuntu-trusty --command -- curl --silent httpbin:8000/delay/5

网络测试的对象

我一开始想用hello来做,但是其实挺不好的,没什么代表性。 echo-server这个就很不错,像是一个回音壁一样,将所有的请求全部打回。 docker pull ealen/echo-server

代码语言:javascript
复制
apiVersion: v1
kind: Namespace
metadata:
  name: echoserver
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: echoserver
  namespace: echoserver
spec:
  replicas: 2
  selector:
    matchLabels:
      app: echoserver
  template:
    metadata:
      labels:
        app: echoserver
    spec:
      containers:
      - image: ealen/echo-server:0.5.1
        imagePullPolicy: Always
        name: echoserver
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: echoserver
  namespace: echoserver
spec:
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
  selector:
    app: echoserver
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: echoserver
  namespace: echoserver
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: echo.minikube.local
    http:
      paths:
      - path: /
        backend:
          serviceName: echoserver
          servicePort: 80
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-06-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 方式1
  • 方式2
  • 网络测试的对象
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档