前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >研发工程师玩转Kubernetes——使用Ingress进行路由

研发工程师玩转Kubernetes——使用Ingress进行路由

作者头像
方亮
发布2023-05-31 14:40:12
2720
发布2023-05-31 14:40:12
举报
文章被收录于专栏:方亮方亮

依据微服务理念,我们希望每个独立的功能由一个服务支持。比如有两个接口:http://www.xxx.com/plus和http://www.xxx.com/minus,前者由一个叫plus-service的服务支持,后者由一个叫minus-service的服务支持。这样就需要一个路由层,在前方将/plus请求路由到plus-service;将/minus路由到minus-service。本文介绍的ingress就可以起到路由的作用。

我们借用《研发工程师玩转Kubernetes——构建、推送自定义镜像》中的simple-http的镜像,使用版本号来访问不同的镜像对应的服务。比如使用/v1访问simple_http_v1对应的镜像,使用/v2访问simple_http_v2对应的镜像。

启用Ingress

这个系列我们使用microk8s进行演示,于是需要启用这个插件。

代码语言:javascript
复制
microk8s enable ingress

启动响应的Service

相关知识可以参见《研发工程师玩转Kubernetes——通过文件创建Service》。具体的清单文件如下:

代码语言:javascript
复制
# simple_http_v1_service.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: simple-http-v1-deployment
spec:
  selector:
    matchLabels:
      app: simple-http-v1
  template:
    metadata:
      labels:
        app: simple-http-v1
    spec:
      containers: 
      - name: simple-http-v1
        image: localhost:32000/simple_http:v1
        ports:
        - containerPort: 8888
---
apiVersion: v1
kind: Service
metadata:
  name: simple-http-v1-service
spec:
  selector:
    app: simple-http-v1
  ports:
  - port: 80
    targetPort: 8888
代码语言:javascript
复制
# simple_http_v2_service.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: simple-http-v2-deployment
spec:
  selector:
    matchLabels:
      app: simple-http-v2
  template:
    metadata:
      labels:
        app: simple-http-v2
    spec:
      containers: 
      - name: simple-http-v2
        image: localhost:32000/simple_http:v2
        ports:
        - containerPort: 8888
---
apiVersion: v1
kind: Service
metadata:
  name: simple-http-v2-service
spec:
  selector:
    app: simple-http-v2
  ports:
  - port: 80
    targetPort: 8888

使用下面命令创建simple-http-v1-service和simple-http-v2-service两个Service,为Ingress路由提供基础服务。

代码语言:javascript
复制
kubectl create -f  simple_http_v1_service.yaml simple_http_v2_service.yaml

创建Ingress

清单文件如下:

代码语言:javascript
复制
# simple_http_ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: simple-http-ingress
  labels:
    name: simple-http-ingress
spec:
  rules:
  - http:
      paths:
      - pathType: Prefix
        path: "/v1"
        backend:
          service:
            name: simple-http-v1-service
            port: 
              number: 80
      - pathType: Prefix
        path: "/v2"
        backend:
          service:
            name: simple-http-v2-service
            port: 
              number: 80

spec.rules用于指定不同http地址的路由信息。上例中pathType: Prefix表示通过前缀匹配,如果匹配到/v1则路由到simple-http-v1-service;如果匹配到/v2,则路由到simple-http-v2-service。

使用下面命令创建该ingress

代码语言:javascript
复制
kubectl create -f simple_http_ingress.yaml

ingress.networking.k8s.io/simple-http-ingress created

测试

代码语言:javascript
复制
curl 127.0.0.1/v1

This service’s version is 1 IP is:10.1.62.173

代码语言:javascript
复制
curl 127.0.0.1/v2

This service’s version is 2 IP is:10.1.62.163

通过测试结果看,ingress将请求正确路由到对应的service上了。

参考资料

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-05-30,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 启用Ingress
  • 启动响应的Service
  • 创建Ingress
  • 测试
  • 参考资料
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档