前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >mac 上学习k8s系列(42)virtualService

mac 上学习k8s系列(42)virtualService

作者头像
golangLeetcode
发布于 2022-08-02 11:42:31
发布于 2022-08-02 11:42:31
39000
代码可运行
举报
运行总次数:0
代码可运行

在学习完istio注入后mac 上学习k8s系列(41)istio 注入,我们如何用istio来进行流量管理呢,用到了istio的crd VirtualService,首先我们来搭建学习环境:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: client
spec:
  replicas: 1
  selector:
    matchLabels:
      app: client
  template:
    metadata:
      labels:
        app: client
    spec:
      containers:
        - name: busybox
          image: busybox
          imagePullPolicy: IfNotPresent
          command: ["/bin/sh", "-ce", "sleep 3600;tail -f /dev/null"]
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: httpd
  labels:
     server: httpd
     app: web
spec:
  replicas: 2
  selector:
     matchLabels:
       server: httpd
       app: web
  template:
    metadata:
      name: httpd
      labels:
          server: httpd
          app: web
    spec:
      containers:
      - name: busybox
        image: busybox
        imagePullPolicy: IfNotPresent
        command: ["/bin/sh","-ce","touch index.html;echo 'hello httpd' >index.html;httpd -p 8080;tail -f /dev/null"]
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat
  labels:
     server: tomcat
     app: web
spec:
  replicas: 2
  selector:
     matchLabels:
       server: tomcat
       app: web
  template:
    metadata:
      name: tomcat
      labels:
          server: tomcat
          app: web
    spec:
      containers:
      - name: tomcat
        image: docker.io/library/tomcat:latest
        imagePullPolicy: IfNotPresent
       
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: v1
kind: Service
metadata:
  name: tomcat-svc
spec:
  selector:
    server: tomcat
  ports:
    - name: http
      port: 8080
      targetPort: 8080
      protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  name: httpd-svc
spec:
  selector:
    server: httpd
  ports:
    - name: http
      port: 8080
      targetPort: 8080
      protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  name: web-svc
spec:
  selector:
    app: web
  ports:
    - name: http
      port: 8080
      targetPort: 8080
      protocol: TCP

启动服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 % kubectl create ns vc   
namespace/vc created
%  kubectl apply -f ./vitural-service/client.yaml -n vc 
deployment.apps/client created
% kubectl apply -f ./vitural-service/deploy.yaml -n vc
deployment.apps/httpd created
deployment.apps/tomcat created
%  kubectl apply -f ./vitural-service/service.yaml -n  vc
service/tomcat-svc created
service/httpd-svc created

启动服务的时候如果出现下面的错误,原因是kubelet会检测是否有前台的服务,没有的话会重启

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 Warning  BackOff    37s (x10 over 2m15s)  kubelet            Back-off restarting failed container

所以需要在command上加一个前台服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
command: [ "/bin/bash", "-ce", "tail -f /dev/null" ]

查看服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
% kubectl -n vc get endpoints
NAME         ENDPOINTS                                                     AGE
httpd-svc    10.1.4.164:8080,10.1.4.165:8080                               9h
tomcat-svc   10.1.4.162:8080,10.1.4.163:8080                               9h
web-svc      10.1.4.162:8080,10.1.4.163:8080,10.1.4.164:8080 + 1 more...   2m3s

检测下服务,分别看下svc-httpd和svc-tomcat

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
% kubectl -n vc exec -it client-5469d56b7f-9kdz8 -- wget -q -O - http://httpd-svc:8080    
hello httpd

 % kubectl -n vc exec -it client-5469d56b7f-9kdz8 -- wget -q -O - http://tomcat-svc:8080 
wget: server returned error: HTTP/1.1 404 
command terminated with exit code 1

看下web-svc,发现它访问两个下游服务的概率都是50%

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
% kubectl -n vc exec -it client-5469d56b7f-9kdz8 -- wget -q -O - http://web-svc:8080
hello httpd
% kubectl -n vc exec -it client-5469d56b7f-9kdz8 -- wget -q -O - http://web-svc:8080
wget: server returned error: HTTP/1.1 404 
command terminated with exit code 1

那么,我们应该如何控制流量不均匀分布呢?一个服务20% 一个80%?通过label的方式就解决不了了,需要vitural service

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: web-svc-vs
spec:
  hosts:
    - web-svc
  http:
    - route:
        - destination:
            host: tomcat-svc
          weight: 20
        - destination:
            host: httpd-svc
          weight: 80

配置文件和nginx的location 的配置很像,它包括两个部分host fields,匹配存在的一个服务名,routing rules可以定义规则实现流量的分发。同时需要注意的是,vitural service必须在istio注入后才能生效。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%  kubectl -n vc apply -f vitural-service/vs.yaml 
virtualservice.networking.istio.io/web-svc-vs created
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 % kubectl -n vc get VirtualService 
NAME         GATEWAYS   HOSTS         AGE
web-svc-vs              ["web-svc"]   45s

开始注入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 % istioctl kube-inject -f  vitural-service/client.yaml |kubectl -n vc apply -f -
deployment.apps/client configured

% istioctl kube-inject -f  vitural-service/deploy.yaml |kubectl -n vc apply -f -
deployment.apps/httpd configured
deployment.apps/tomcat configured

可以看到我们的服务注入成功

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
% kubectl get pods -n vc 
NAME                      READY   STATUS    RESTARTS   AGE
client-78b5c977-xb27z     2/2     Running   0          3m48s
httpd-6cbf88b69c-l4dwn    2/2     Running   0          2m43s
httpd-6cbf88b69c-sm5xn    2/2     Running   0          3m28s
tomcat-7d754cc9b4-49sd2   2/2     Running   0          3m28s
tomcat-7d754cc9b4-rqz5t   2/2     Running   0          2m28s

试下,可以看到流量的分配比例是8:2

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
% kubectl -n vc exec -it client-78b5c977-xb27z -- wget -q -O - http://web-svc:8080
hello httpd
xiazemin@xiazemindeMBP 实战 % kubectl -n vc exec -it client-78b5c977-xb27z -- wget -q -O - http://web-svc:8080
hello httpd
xiazemin@xiazemindeMBP 实战 % kubectl -n vc exec -it client-78b5c977-xb27z -- wget -q -O - http://web-svc:8080
hello httpd
xiazemin@xiazemindeMBP 实战 % kubectl -n vc exec -it client-78b5c977-xb27z -- wget -q -O - http://web-svc:8080
hello httpd
xiazemin@xiazemindeMBP 实战 % kubectl -n vc exec -it client-78b5c977-xb27z -- wget -q -O - http://web-svc:8080
hello httpd
xiazemin@xiazemindeMBP 实战 % kubectl -n vc exec -it client-78b5c977-xb27z -- wget -q -O - http://web-svc:8080
hello httpd
xiazemin@xiazemindeMBP 实战 % kubectl -n vc exec -it client-78b5c977-xb27z -- wget -q -O - http://web-svc:8080
hello httpd
xiazemin@xiazemindeMBP 实战 % kubectl -n vc exec -it client-78b5c977-xb27z -- wget -q -O - http://web-svc:8080
wget: server returned error: HTTP/1.1 404 Not Found
command terminated with exit code 1
xiazemin@xiazemindeMBP 实战 % kubectl -n vc exec -it client-78b5c977-xb27z -- wget -q -O - http://web-svc:8080
wget: server returned error: HTTP/1.1 404 Not Found
command terminated with exit code 1
xiazemin@xiazemindeMBP 实战 % kubectl -n vc exec -it client-78b5c977-xb27z -- wget -q -O - http://web-svc:8080
hello httpd

除了可以按照比例分配流量外,还可以按照条件来分配流量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: web-svc-vs-header
spec:
  hosts:
    - web-svc
  http:
  - match:
    - headers:
        end-user:
          exact: xiazemin
    route:
      - destination:
          host: httpd-svc
  - route:
      - destination:
          host: tomcat-svc

上面的例子,就是通过header来做流量的分配。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 % kubectl -n vc exec -it client-78b5c977-xb27z -- wget -q -O - http://web-svc:8080
wget: server returned error: HTTP/1.1 404 Not Found
command terminated with exit code 1

 % kubectl -n vc exec -it client-78b5c977-xb27z -- wget -q -O - http://web-svc:8080 --header 'end-user:xiazemin'
hello httpd
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 golang算法架构leetcode技术php 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
ASP.NET MVC5+EF6+EasyUI 后台管理系统(22)-权限管理系统-模块导航制作
最近比较忙,系统难度独步增加,文章的发布速度明显比以前慢了。 由于我们已经跑通了整个系统,所有东西都回到了简单,接下来我们做模块制作也就是操作SysModule表。 首先我们来回顾一下之前的难点主要就是SysRight这个表Rightflag字段的改变,这个字段关系导航与角色组的关系显示(即有权限时候显示菜单导航,这个更新讲到授权讲到,在这里浮头一下) 所以我们操作SysModule必须更新SysRight这张表,把模块先分配给角色 所以思路已经比较明显和简单了,这里我们模块将用treegrid来做,同时也
用户1149182
2018/01/16
5.2K0
ASP.NET MVC5+EF6+EasyUI 后台管理系统(22)-权限管理系统-模块导航制作
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(11)-系统日志和异常的处理①
系统需要越来越自动化,我们需要引入日志记录和异常捕获 管理员的操作记录需要被记录,看出哪些模块是频繁操作,分析哪些是不必要的功能,哪些是需要被优化的。 系统的异常需要被捕获,而不是将系统出错显示出来给用户就不了了知。我们需要异常日志不断改进系统。 我们老说用户,我们还没有用户权限的表,所以我们在Home中先加入一个虚拟用户吧! 首先我们创建一个用户类AccountModel放在App.Models下的Sys文件夹下 using System; using System.Collections.Generic
用户1149182
2018/01/16
2K0
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(11)-系统日志和异常的处理①
ASP.NET MVC5+EF6+EasyUI 后台管理系统(44)-工作流设计-设计表单
设计表单是比较复杂的一步,完成一个表单的设计其实很漫长,主要分为四步。 开始之前先说说表的结构。 其实表Flow_Form与Flow_FormContent设计是有一个缺陷的。我总共是设置最高26个字
用户1149182
2018/01/16
2.1K0
ASP.NET MVC5+EF6+EasyUI 后台管理系统(44)-工作流设计-设计表单
ASP.NET MVC5+EF6+EasyUI 后台管理系统(56)-插件---单文件上传与easyui使用fancybox
今天整合lightbox插件Fancybox1.3.4,发现1.3.4版本太老了。而目前easyui 1.4.x的jquery的版本已经到达1.11.x以上。 本以为不能再使用这个插件,但是发现还是有
用户1149182
2018/01/16
1.8K0
ASP.NET MVC5+EF6+EasyUI 后台管理系统(56)-插件---单文件上传与easyui使用fancybox
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(8)-MVC与EasyUI DataGrid 分页
前言 为了符合后面更新后的重构系统,文章于2016-11-1日重写 EasyUI Datagrid在加载的时候会提交一些分页的信息到后台,我们需要根据这些信息来进行数据分页再次返回到前台 实现 首先要让DataGrid支持分页,我们需要在JS Datagrid中加入下列几个属性 是否启用分页:pagination 默认是false 每页数量:pageSize 默认10 可选择每页数量:pageList 默认[10,20,30,40,50] 排序字段:sortName 默认null 排序类型:sortO
用户1149182
2018/01/16
1.3K0
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(8)-MVC与EasyUI DataGrid 分页
ASP.NET MVC5+EF6+EasyUI 后台管理系统(49)-工作流设计-我的申请
提交一个表单后 我们需要一个管理的列表。我的申请,我的申请包含了提交内容的列表状态 状态分:过期,未审核,审核通过,驳回,废弃 列表对应代码 @using App.Admin; @using App.
用户1149182
2018/01/16
1.2K0
ASP.NET MVC5+EF6+EasyUI 后台管理系统(49)-工作流设计-我的申请
ASP.NET MVC5+EF6+EasyUI 后台管理系统(45)-工作流设计-设计步骤
步骤设计很重要,特别是规则的选择。 我这里分为几个规则 1.按自行选择(在起草时候自行选审批人,比较灵活) 2.按上级(无需指定,当时需要知道用户的上司是谁,可以在职位管理设置,或者在用户表直接设置) 3.按职位(选择职位,直接获得该职位的人员) 4.按部门(按部门,直接获得该部分的人员) 5.按人员(设置步骤时就指定人员) 以上用户必须和部门,职位,上级有所关联,只要做好一个其实全部都同理 表结构分析:Flow_FormStep中有IsAllCheck字段我设计这个的目的是批量审核,比如我选择了部门,那么
用户1149182
2018/01/16
1.4K0
ASP.NET MVC5+EF6+EasyUI 后台管理系统(45)-工作流设计-设计步骤
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(12)-系统日志和异常的处理②
上一讲我们做了日志与异常的结果显示列表,这一节我们讲要把他应用系统中来。 首先我们在App.Common类库中创建一个通用类ResultHelper,这个类里面写了,获取一个GUID,获取当前时间,处理字符串等操作,虽然我们目前要用到的一个就是获取GUID但是以后我们可能还要用到别的,所以我都把他放进入了 然后在App.Admin创建一个核心文件夹,Core,放入LogHandler这个类是主要是写入日志,避免在每次都要实例化这个类,我把他封装起来,大家一看就知道。 然后修改Controller的Creat
用户1149182
2018/01/16
1.1K0
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(12)-系统日志和异常的处理②
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(14)-EasyUI缺陷修复与扩展
不知不觉已经过了13讲,(本来还要讲多一讲是,数据验证之自定义验证,基于园友还是对权限这块比较敢兴趣,讲不讲验证还是看大家的反映),我们应该对系统有一个小结。 首先这是一个团队开发项目,基于接口编程,我们从EasyUI搭建系统的框架开始,开始了一个样例程序对EasyUI的DataGrid进行了操作,并实现Unity的注入到容器,使程序 的性能大大提升,代码质量上升,更佳利于单元测试,使用日志和异常坚固系统稳定性等等。。。。 当然你应该觉得系统还有存在很多不足,我们应该动手来优化一下。 下面我罗列了需要优
用户1149182
2018/01/16
8490
ASP.NET MVC5+EF6+EasyUI 后台管理系统(43)-工作流设计-字段分类设计
建立好42节的表之后,每个字段英文表示都是有意义的说明。先建立,就知道表的关系和用处了,当然,我的设计只是一个参考,你可能有很多改进的地方。 我们的工作流具体细节流程是这样的: 最终我们的模块也是这样
用户1149182
2018/01/16
1.1K0
ASP.NET MVC5+EF6+EasyUI 后台管理系统(43)-工作流设计-字段分类设计
ASP.NET MVC5+EF6+EasyUI 后台管理系统(7)-MVC与EasyUI DataGrid
本节知识点 为了符合后面更新后的重构系统,文章于2016-11-1日重写 EasyUI读取MVC后台Json数据 开始实现 我们的系统似乎越来越有趣了 首先从前端入手,开打View下面的Shared创建一个视图模版(母版页) <!DOCTYPE html> <html> <head> <title>Main</title> <script src="@Url.Content("~/Scripts/jquery.min.js")" type="text/javascript"></scr
用户1149182
2018/01/16
1.7K0
ASP.NET MVC5+EF6+EasyUI 后台管理系统(7)-MVC与EasyUI DataGrid
ASP.NET MVC5+EF6+EasyUI 后台管理系统(27)-权限管理系统-分配用户给角色
分配用户给角色,跟分配角色给用户操作是基本一致的。 打开模块维护,展开SysRole模块添加一个操作码,并赋予权限 设置好之后将权限授权给管理员,在SysRole的index添加操作码与js事件 @H
用户1149182
2018/01/16
1.1K0
ASP.NET MVC5+EF6+EasyUI 后台管理系统(27)-权限管理系统-分配用户给角色
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(3)-漂亮系统登陆界面
前言 本文于2016-10修改 这次的代码是基于上一节的代码集成的,素材都在第二节里头 本次添加登录页面的控制器即可 实现 添加Account的Index视图: @{ Layout = null; } <!DOCTYPE html> <html> <head> <title>系统登录</title> <script src="/Scripts/jquery.min.js" type="text/javascript"></script> @Styles.
用户1149182
2018/01/16
9130
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(3)-漂亮系统登陆界面
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(23)-权限管理系统-角色组模块
接下来我们的目标是 角色组管理 角色组权限设置 用户管理 把角色组授权给用户 给用户分配角色组 所以最少我们还要讲多5讲才能结束这个管理系统,经过之前的样例程序,我们很熟悉这个套路了,如果你很喜欢这个
用户1149182
2018/01/16
8390
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(23)-权限管理系统-角色组模块
ASP.NET MVC5+EF6+EasyUI 后台管理系统(74)-微信公众平台开发-自定义菜单
1、click:点击推事件用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event的结构给开发者(参考消息接口指南),并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值与用户进行交互;
用户1149182
2019/09/12
1.3K0
ASP.NET MVC5+EF6+EasyUI 后台管理系统(74)-微信公众平台开发-自定义菜单
ASP.NET MVC5+EF6+EasyUI 后台管理系统(5)-EF增删改查
前言 为了符合后面更新后的重构系统,文章于2016-11-1日重写 回顾上一节的解决方案,我们看出了解决方案中类库的关系 这里要说明一点MVC!=三层 他们大约是这样的一种关系 代码实现 上一
用户1149182
2018/01/16
8140
ASP.NET MVC5+EF6+EasyUI 后台管理系统(5)-EF增删改查
ASP.NET MVC5+EF6+EasyUI 后台管理系统-分配角色给用户
由于之前做了将权限赋给角色,还需要做将角色组赋给用户,和将用户赋给角色组,一个用户可以拥有多个角色组,一个角色组包含多个用户,打开模块管理,添加一个分配的操作码 并在 角色权限设置授权给他 在SysU
用户1149182
2018/01/16
1.1K0
ASP.NET MVC5+EF6+EasyUI 后台管理系统-分配角色给用户
ASP.NET MVC5+EF6+EasyUI 后台管理系统(46)-工作流设计-设计分支
步骤设置完毕之后,就要设置好流转了,比如财务申请大于50000元(请假天数>5天)要总经理审批,否则财务审批之后就结束了。 设置分支没有任何关注点,我们把关注点都放在了用户的起草表单。所以本节如同设置
用户1149182
2018/01/16
1.2K0
ASP.NET MVC5+EF6+EasyUI 后台管理系统(46)-工作流设计-设计分支
ASP.NET MVC5+EF6+EasyUI 后台管理系统(80)-自由桌面
系列目录 前言 这次我们来做一个有趣的事情,有朋友跟做了很远,找我要自由桌面的代码,这次我们将演示自由桌面的代码。 自由桌面:用户可以随意增删改桌面的布局、个数(只留自己需要看到的数据),这次纯属
用户1149182
2018/01/12
1.6K0
ASP.NET MVC5+EF6+EasyUI 后台管理系统(80)-自由桌面
ASP.NET MVC5+EF6+EasyUI 后台管理系统(6)-Unity 依赖注入
前言 为了符合后面更新后的重构系统,文章于2016-11-1日重写 本节重构一下代码,采用IOC控制反转,也就是依赖注入 您可以访问http://unity.codeplex.com/releases得到最新版本的Unity现在。 这里http://unity.codeplex.com/documentation我们找到了帮助文档大家可以下载下来看看 当然,如果您在您的visual studio 中安装了Nuget 包管理器,你可以直接在Nuget中获取到最新版本的Unity。 我们采用的是构造
用户1149182
2018/01/16
8580
ASP.NET MVC5+EF6+EasyUI 后台管理系统(6)-Unity 依赖注入
推荐阅读
ASP.NET MVC5+EF6+EasyUI 后台管理系统(22)-权限管理系统-模块导航制作
5.2K0
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(11)-系统日志和异常的处理①
2K0
ASP.NET MVC5+EF6+EasyUI 后台管理系统(44)-工作流设计-设计表单
2.1K0
ASP.NET MVC5+EF6+EasyUI 后台管理系统(56)-插件---单文件上传与easyui使用fancybox
1.8K0
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(8)-MVC与EasyUI DataGrid 分页
1.3K0
ASP.NET MVC5+EF6+EasyUI 后台管理系统(49)-工作流设计-我的申请
1.2K0
ASP.NET MVC5+EF6+EasyUI 后台管理系统(45)-工作流设计-设计步骤
1.4K0
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(12)-系统日志和异常的处理②
1.1K0
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(14)-EasyUI缺陷修复与扩展
8490
ASP.NET MVC5+EF6+EasyUI 后台管理系统(43)-工作流设计-字段分类设计
1.1K0
ASP.NET MVC5+EF6+EasyUI 后台管理系统(7)-MVC与EasyUI DataGrid
1.7K0
ASP.NET MVC5+EF6+EasyUI 后台管理系统(27)-权限管理系统-分配用户给角色
1.1K0
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(3)-漂亮系统登陆界面
9130
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(23)-权限管理系统-角色组模块
8390
ASP.NET MVC5+EF6+EasyUI 后台管理系统(74)-微信公众平台开发-自定义菜单
1.3K0
ASP.NET MVC5+EF6+EasyUI 后台管理系统(5)-EF增删改查
8140
ASP.NET MVC5+EF6+EasyUI 后台管理系统-分配角色给用户
1.1K0
ASP.NET MVC5+EF6+EasyUI 后台管理系统(46)-工作流设计-设计分支
1.2K0
ASP.NET MVC5+EF6+EasyUI 后台管理系统(80)-自由桌面
1.6K0
ASP.NET MVC5+EF6+EasyUI 后台管理系统(6)-Unity 依赖注入
8580
相关推荐
ASP.NET MVC5+EF6+EasyUI 后台管理系统(22)-权限管理系统-模块导航制作
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档