云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

分布式存储_oracle数据库架构_评分榜

小七 141 0

如何使用Minikube+Cloudflare

以下是StackPointCloud软件工程师nathanfranzen的一篇客座博客文章。StackPointCloud是堆栈点.io,用于云本地工作负载的领先的多云管理平台。他们是Kubernetes Cloudflare入口控制器的开发人员。使用Argo隧道在Minikube上部署应用程序本文假设对Kubernetes有基本的了解。如果您不熟悉库伯内特斯,请访问https://kubernetes.io/docs/tutorials/kubernetes-basics/学习基础知识。Minikube是一个允许您在本地运行Kubernetes集群的工具。这不仅是一个很好的方法来试验Kubernetes,而且也是一个尝试使用反向隧道部署服务的好方法。在Cloudflare,我们创建了一个名为Argo Tunnel的产品,它允许您通过使用Cloudflare作为边缘的隧道来托管服务。隧道通过创建到Cloudflare边缘的连接并在其上路由您的流量,提供了一种将服务公开到internet的方法。由于您的服务正在创建自己到边缘的出站连接,因此您不必打开端口、配置防火墙,甚至不必为您的服务提供公共IP地址。所有流量都通过Cloudflare,在攻击和入侵尝试到达您之前阻止它们,完全保护您的来源。将您的服务部署到世界各地的更多位置,就像旋转更多容器一样简单。任何使用入口控制器的东西都会收到你的流量,无论容器在世界上还是在互联网上运行。即使在跨多个区域或云提供商部署时,隧道也可以简化健壮的安全性。通常Minikube应用程序需要移植到要部署的Kubernetes生产设置上,但是使用Argo隧道,您可以轻松地部署一个本地运行但公开可用的Minikube实例,这使得它成为试用Kubernetes和Argo隧道的好方法。在本例中,我们将创建一个简单的微服务,在给定密钥时返回数据,将其部署到Minikube中,并启动Argo隧道机制,使其暴露在互联网上。应用程序API入门我们将首先使用Flask在Python中创建一个web服务。我们将编写一个简单的应用程序,用几行代码来表示一个API的一小部分。完整的申请,秘密_令牌.py只是:从烧瓶进口烧瓶,jsonify,abortapp=烧瓶@应用程序路径('/api/v1/token/,方法=['GET'])def令牌(密钥):测试数据={"e8990ab9be26":"3OX9+p39QLIvE6+x/w=","b01323031589":"wBvlo9G7Wqxsb2P9YS=",}秘密=测试_数据.get(键)如果没有秘密:中止(404)return jsonify({"key":键,"token":secret})这个小小的服务将简单地用一些秘密数据响应GET请求,给定一个密钥。使用Docker我们将采取下一步部署,并使用Dockerfile将应用程序打包到可移植的Docker映像中:从python:alpine3.7运行pip安装烧瓶gunicorn复制机密_令牌.py.命令gunicorn-b 0.0.0.0:8000机密_令牌:应用程序这将允许我们定义一个Docker映像,Minikube将构建容器的蓝图。部署到Minikube如果未安装Minikube,请在此处安装:https://kubernetes.io/docs/tasks/tools/install-minikube/通常,我们将使用Docker守护进程构建Docker映像,并将其推送到集群可以访问的存储库中。不过,对于Minikube,这是我们不需要的往返旅程。我们可以将Minikube Docker守护进程与Docker构建过程共享,避免推送到云存储库:$eval$(minikube docker环境)$docker build-t myrepo/secret\u令牌。该映像现在出现在运行Kubernetes的Minikube虚拟机上。在生产Kubernetes系统中,我们可能会花费大量时间来检查部署和服务清单的细节,但是kubectl run提供了一种简单的方法来启动和运行基本应用程序。我们添加了image pull policy标志,以确保Kubernetes不会首先尝试从Docker Hub远程拉取映像。$kubectl run token--image myrepo/secret_令牌--expose--port 8000--image pull policy=IfNotPresent--replicas=3现在,我们有一个Kubernetes部署,它使用从我们的映像构建的3个容器副本,以及一个与之相关的服务,它公开了端口8000。将两个清单本地保存到文件中:kubectl获取部署令牌--export-o yaml>部署.yamlkubectl获取svc令牌--export-o yaml>服务.yaml我们可以编辑这些文件来更改集群配置。对于本地测试,让我们更改该服务,以便它公开一个NodePort——这将把服务代理到Minikube虚拟机上的一个端口。替换中的规范服务.yaml归档方式:规格:端口:-节点报告:32080端口:8000协议:TCP目标端口:8000选择器:运行:令牌会期:无类型:NodePort并将更改应用于我们的集群:$kubectl应用-f服务.yaml现在,我们可以使用curl进行本地测试,通过Minikube虚拟机上的NodePort访问服务:$minikube开始$export MINIKUBE_IP=$(MINIKUBE IP)$curl $MINIKUBE_IP:32080/api/v1/token/b01323031589使用Cloudflare的Argo隧道NodePort设置可以在本地测试应用程序,但是如果我们想与其他人共享此服务或更好地模拟它在现实世界中的工作方式,我们需要将其公开到internet上。在大多数情况下,这意味着在云环境中运行,处理负载均衡器配置,或者设置NGINX入口控制器,处理网络规则和路由。Cloudflare Argo隧道入口控制器允许我们将几乎所有内容路由到Cloudflare域,包括运行在Minikube内部的服务。在Kubernetes集群中,ingres是一个对象,它描述了我们希望如何在internet上公开我们的服务,而ingres控制器是实际公开它的进程。要安装Cloudflare入口控制器,需要有Cloudflare域和Argo隧道证书,并配置cloudflared应用程序。kubectlrun对于快速安装测试应用程序来说很好,但是对于更复杂的安装,helm是一个很好的工具,用于打包Cloudflare代理。一旦安装了helm客户机,一个简单的helm init将配置Minikube来使用它。入口控制器的图表位于trusted charts public repository中,可以直接从那里安装。云状结构Cloudflared是在您的机器上运行的隧道的末端,它通过隧道代理与源服务器之间的通信。如果您还没有安装cloudflared应用程序,请访问https://developers.cloudflare.com/argo-tunnel/quickstart/quickstart/安装带舵控制器我们现在将定义一些存储库中的默认值,这些命令将覆盖一些图表:$helm回购添加可信图表$域=anthroprera.net$CERT_B64=$(base64-w0~/.cloudflared)/证书pem2> /dev/null | | base64~/.cloudflared/证书pem)$NS="默认值"$USE_RBAC=true$NAME=cloudflare$helm install--name$name--命名空间$NS\--设置rbac.安装=$USE\u RBAC\--设置secret.install=真\--设置机密.域=$域,机密证书=$证书B64\可信图表/argo入口此安装配置了两个cloudflare warp入口控制器副本,以便我们公开的任何服务都将获得两个到cloudflare边缘的独立隧道,并在单个池中成对出现。使用入口暴露我们的应用程序我们需要写一个入口定义。创建一个名为warp的文件-控制器.yaml:API版本:扩展/v1beta1种类:入口元数据:注释:kubernetes.io/入口类别:阿尔戈隧道名称:令牌命名空间:默认规格:规则:-主持人:令牌.anthroprera.nethttp地址:路径:-后端:serviceName:令牌服务端口:8000并应用定义:$kubectl应用-f服务.yaml检查部署$kubectl得到吊舱应打印:名称就绪状态重新启动年龄cloudflare-argo-ingres-6b886994b-52fsl 1/1运行0 34stoken-766cd8dd4c-bmksw 1/1运行0 2mtoken-766cd8dd4c-l8gkw 1/1运行0 2mtoken-766cd8dd4c-p2phg 1/1运行0 2m输出显示了三个token pods和cloudflare warp ingress pod。检查argo吊舱中的日志以查看入口控制器的活动:$kubectl logs cloudflare-argo-ingres-6b886994b-52fsl控制器监视集群以创建入口、服务和pod。终结点位于https://token.anthroprera.net/api/v1/token/e8990ab9be26返回{"key":"e8990ab9be26","token":"3OX9+p39QLIvE6+x/YK4DxWWCFi/D+c7g99c14oNB8g="}现在,这一小部分api可以在互联网上公开测试。显然,您不希望在minikube实例中提供公共流量,但是对于跨开发团队共享初步工作来说,这无疑是非常方便的。"分析"选项卡下的Cloudflare仪表板将显示有关对您的区域的请求的一些常规统计信息。路由和关系Kubernetes集群和Cloudflare网络中的路由示意图:warp控制器pods为Argo隧道提供了一种通过Cloudflare的edge将包含应用程序的pods连接到internet的方法。使用Cloudflare负载平衡器更进一步这个演示通过一个Argo隧道公开一个服务。如果您的Cloudflare帐户启用了负载平衡,则可以通过负载平衡器和隧道池来路由流量,方法是添加annotationargo.cloudflare.com/lb-pool=入口令牌。有关负载平衡器路由和权重的详细信息,请参阅Cloudflare文档。如果确实使用负载平衡,则可以运行入口控制器的多个实例。