电商培训类网站模板,海外网站测速,做短视频的软件,电商运营是做什么目录 使用Ingress来负载分发微服务 Demo规划 准备Demo并完成部署 创建部署#xff08;Deployment#xff09;资源 创建服务#xff08;Service#xff09;资源 创建Ingress资源并配置转发规则 使用Ingress来负载分发微服务NodePort Service存在太多缺陷#xff0c;不适合… 目录 使用Ingress来负载分发微服务 Demo规划 准备Demo并完成部署 创建部署Deployment资源 创建服务Service资源 创建Ingress资源并配置转发规则 使用Ingress来负载分发微服务NodePort Service存在太多缺陷不适合生产环境。LoadBlancer Service则不太灵活比如针对微服务架构那么不同服务是否需要多个负载均衡服务呢那么我们还有其他选择么那就是Ingress。Ingress将集群外部的HTTP和HTTPS路由暴露给集群中的Service相当于集群的入口而入口规则则由Ingress定义的规则来控制。在使用Ingress之前我们先需要有一个Ingress Controller入口控制器例如ingress-nginx。Ingress负责定义抽象的规则而Ingress Controller负责具体实现。通常情况下Ingress搭配负载均衡一起使用。接下来笔者结合一个简单的微服务Demo来使用Ingress进行负载分发。由于需要使用到负载均衡服务本教程使用腾讯云容器服务进行讲解。Demo规划为了便于大家理解我们先做一个简单的规划。整体规划图如下所示如图所示整体步骤如下所示我们需要开发两个应用分别为apidemo1和apidemo2并提供不同的接口服务然后需要将两个应用分别部署到k8s集群并且分别创建不同的Service接下来我们需要创建Ingress配置不同的转发规则最后为了访问方便我们需要配置域名映射。准备Demo并完成部署如上所述接下来我们进入开发环节。为了完成我们上述的目标我们需要提供以下两个demo不限编程语言apidemo1如下图所示apidemo1的访问路径为https://{hostname}:{port}/api/demo1输出JSON“[value1,value2]”。注意apidemo1和apidemo2均需支持80端口和443端口访问。apidemo2如下图所示apidemo2的访问路径为https://{hostname}:{port}/api/demo2输出JSON“[value3,value4]”。由于Demo比较简单这里我们就不贴代码了。Demo准备完成后我们需要推送docker镜像到目标仓储然后创建部署Deployment以及服务Service。创建部署Deployment资源整个过程在前面的章节我们均有详细讲述因此这里就不赘述了这里我们仅提供参考的YAML定义文件apiVersion: apps/v1beta2 #api版本
kind: Deployment #使用部署对象
metadata: labels: #标签列表 app: apidemo1 name: apidemo1 #部署名称 namespace: default #命名空间
spec: replicas: 1 #副本数 selector: #选择器 matchLabels: app: apidemo1 template: #Pod模板 metadata: labels: app: apidemo1 spec: containers: #容器列表 - env: #环境变量设置 - name: PATH value: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin - name: ASPNETCORE_URLS value: http://:80 - name: DOTNET_RUNNING_IN_CONTAINER value: true - name: ASPNETCORE_VERSION value: 2.2.6 image: ccr.ccs.tencentyun.com/magicodes/apidemo1:latest #镜像地址 imagePullPolicy: Always #镜像拉取策略Always表示总是拉取最新镜像IfNotPresent表示如果本地存在则不拉取Never则表示只使用本地镜像 name: apidemo1 #容器名称 resources: #资源限制 limits: #最高限制 cpu: 500m memory: 256Mi requests: #预分配 cpu: 250m memory: 64Mi workingDir: /app #工作目录 dnsPolicy: ClusterFirst #DNS策略 restartPolicy: Always #重启策略 terminationGracePeriodSeconds: 30 #删除需要时间镜像是公开的基于以上YAML定义各位可以直接基于腾讯云的容器服务的【YAML创建资源】进行创建步骤如下进入容器服务选择已有集群进入进入工作负载面板选择【Deployment】点击右上角的【YAML创建资源】按钮贴入刚刚定义的YAML如下图所示然后点击创建4.接下来需要确保创建成功。我们使用上述参考的YAML分别创建Deployment“apidemo1”和“apidemo2”如下图所示创建服务Service资源接下来我们来分别创建“apidemo1”和“apidemo2”Service资源。参考YAML如下所示apiVersion: v1
kind: Service #资源类型
metadata: name: apidemo1 #服务名称 namespace: default
spec: ports: #端口列表 - name: tcp-80-80 nodePort: 31010 #节点端口 port: 80 #当前端口 protocol: TCP #协议 targetPort: 80 #目标端口 selector: #标签选择器 app: apidemo1 type: NodePort #NodePort 类型的Service注意因为Ingress不会暴露任意端口或协议因此用于外部访问时Service类型必须为NodePort或者LoadBalancer类型。使用上述类似的“YAML创建资源”的步骤创建Service如下图所示我们创建的Service类型为NodePort因此可以通过节点公网IP和上述定义的nodePort访问如下图所示创建Ingress资源并配置转发规则接下来我们需要创建Ingress并配置好转发规则达成如下目标使用同一个IP访问多个API服务这里我们对应的是“apidemo1”和“apidemo2”地址http://{IP}/api/demo1将访问应用“apidemo1”地址http://{IP}/api/demo2将访问应用“apidemo2”根据以上目标我们定义YAML如下所示apiVersion: extensions/v1beta1
kind: Ingress
metadata: annotations: kubernetes.io/ingress.class: qcloud #注释,不同的Ingress控制器支持不同的注释 name: demo-ip namespace: default
spec: rules: #规则列表 - http: #HTTP规则 paths: #路径列表 - backend: #后端配置 serviceName: apidemo1 #后端服务名称 servicePort: 80 #服务端口 path: /api/demo1 #路径同一个域名路径需不同 - http: paths: - backend: serviceName: apidemo2 #后端服务名称 servicePort: 80 #服务端口 path: /api/demo2 #路径同一个域名路径需不同使用以上YAML创建资源腾讯云会自动创建负载均衡服务并且提供负载均衡IP如下图所示我们来验证下通过此IP访问是否能够达到预期结果测试分别如下图所示虽然我们达成了目标但是通过IP访问体验并不友好如何通过域名访问呢YAML定义定义如下所示apiVersion: extensions/v1beta1
kind: Ingress
metadata: annotations: kubernetes.io/ingress.class: qcloud #注释,不同的Ingress控制器支持不同的注释 kubernetes.io/ingress.http-rules: [{host:demo.xin-lai.com,path:/api/demo1,backend:{serviceName:apidemo1,servicePort:80}},{host:demo.xin-lai.com,path:/api/demo2,backend:{serviceName:apidemo2,servicePort:80}}] #HTTP转发规则 kubernetes.io/ingress.https-rules: null kubernetes.io/ingress.rule-mix: true random: 7778255514276773869 name: demo namespace: default
spec: rules: #规则列表 - host: demo.xin-lai.com #主机名可选。如不填写则使用IP地址。 http: #HTTP规则 paths: #路径列表 - backend: #后端配置 serviceName: apidemo1 #后端服务名称 servicePort: 80 #服务端口 path: /api/demo1 #路径同一个域名路径需不同 - host: demo.xin-lai.com #主机名可选。如不填写则使用IP地址。 http: paths: - backend: serviceName: apidemo2 #后端服务名称 servicePort: 80 #服务端口 path: /api/demo2 #路径同一个域名路径需不同值得注意的是不同的Ingress控制器支持不同的注释因此注释的编写请参阅所使用的Ingress控制器的说明。转发规则中host为空则使用IP。创建完成之后腾讯云同样会自动创建负载均衡服务并且提供负载均衡IP如下图所示接下来我们需要将域名“demo.xin-lai.com”解析到该负载均衡IP“193.112.232.48”解析完成后我们同样进行验证如上图所示我们使用域名完成了以下目标使用同一个域名“demo.xin-lai.com”访问了“apidemo1”和“apidemo2”地址http://demo.xin-lai.com/api/demo1将访问应用“apidemo1”地址http://demo.xin-lai.com/api/demo2将访问应用“apidemo2”至此一个简单的使用Ingress来负载分发微服务的Demo完成。当然这仅仅是微服务架构的万里长征第一步毕竟Nginx Ingress控制器仅仅解决了服务的分发并不具备完整的接口网关功能对于这块笔者推荐大家使用KongKong Ingress Controller架构如下图所示接下来我们再谈谈微服务应用服务的管理问题。微服务往往有许多小服务每个微服务都能够独立进行部署和扩展那么必然提高了应用管理的复杂度它们的配置、分发、版本管理等等都是一个管理的难题。在这块有什么更好的解决方案吗那就Helm。往期内容Docker Kubernetes已成为云计算的主流二十六容器化之后如何节省云端成本二十七了解Kubernetes主体架构二十八使用Minikube部署本地Kubernetes集群二十九使用kubectl管理k8s集群三十使用Kubeadm创建k8s集群之部署规划三十一使用Kubeadm创建k8s集群之节点部署三十二集群故障处理之处理思路以及健康状态检查三十三集群故障处理之处理思路以及听诊三板斧三十四使用WebDeploy部署远程IIS网站使用Kubectl部署应用通过Service访问应用 1通过Service访问应用 2转载是一种动力 分享是一种美德