CloudTTY:下一代云原生开源 Cloud Shell
source link: http://blog.daocloud.io/8276.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
CloudTTY:下一代云原生开源 Cloud Shell-DaoCloud道客博客
helm repo add daocloud https://release.daocloud.io/chartrepo/cloudshell helm install cloudtty --version 0.1.0 daocloud/cloudtty -n cloudtty-system --create-namespace
apiVersion: cloudshell.cloudtty.io/v1alpha1 kind: CloudShell metadata: name: cloudshell-sample spec: configmapName: "my-kubeconfig" commandAction: "bash" ttl: 100 once: false exposureMode: "NodePort" cleanup: true
-
ConfigmapName:集群的 kubeconfig 文件,使用 configmap 挂载到 pod 中方式。如果是多集群,必须要保证网络的连通性 (如果是本机集群,可以不用提供 kubeconfig,此功能会在 v0.2.0 版本开放)。
-
CommandAction:执行的初始化命令,也可以指定 kubectl exec 或者 kubectl logs 来进入容器和查看容器日志。
-
TTL:cloud shell 的存活时间,时间过期会断开连接并销毁容器。
-
Once:访问 cloudTTY 服务的有效连接数,默认为 false,如果设置为 true,将只能访问一次。如果想要窗口多开,必须将此参数设置为 false。
-
ExposureMode:cloudTTY 服务的暴露方式,目前支持 ClusterIP、NodePort、Ingress、VirtualService 4 种模式,不同的模式将创建不同的资源提供路由的功能。
-
Cleanup:TTL 超时后是否销毁 cloudshell 资源。
kubectl apply -f https://github.com/cloudtty/cloudtty/blob/main/config/samples/cloudshell_v1alpha1_cloudshell.yaml
apiVersion: cloudshell.cloudtty.io/v1alpha1 kind: CloudShell metadata: name: vs-demo namespace: "cloudtty-system" spec: configmapName: "my-kubeconfig" runAsUser: "root" commandAction: "bash" exposureMode: "VirtualService" pathPrefix: "/apis/cloudtty.io/" ttl: 100 once: false virtualServiceConfig: virtualServiceName: "cloudshell-vs-demo" namespace: "cloudtty-system" gateway: "istio-system/istio-gateway" export_to: "istio-system"
1. CloudTTY 是基于 ttyd 的服务,当创建 cloudshell 的 cr 后,operator 会创建一个运行 ttyd 的 job 服务,并将 configmap 挂载到 pod 里面去,并设置必要的环境变量,保证 ttyd 的服务运行环境。然后提供了从外部环境访问服务的资源。其中 service 是必需的资源,无论是使用 ingress 还是 istio 的 virtaulService 进行负载。 2. 当 job 和 pod 都运行成功以后,会将访问点设置到 AccessUrl 中。 3. 当 job 在 TTL 或者其他原因结束之后,一旦 job 变为 Completed,cloudshell 的状态也会变 Completed。我们可以设置当 cloudshell 的状态为 Completed 时,同时删除相关联的资源。
-
ClusterIP:默认的模式,在集群中创建 ClusterIP 类型的 Service 资源。适用于第三方集成 cloudtty 服务,用户可以选择更加灵活的方式来暴露自己的服务。
-
NodePort:最简单的暴露服务模式,在集群中创建 NodePort 类型的 Service 资源。可以用过节点 IP 和 对应的端口号访问 cloudTTY 服务。
-
Ingress:在集群中创建 ClusterIP 类型的 Service 资源,并创建 Ingress 资源,通过路由规则负载到 Service 上。适用于集群中使用 Ingress Controller 进行流量负载的情况。创建 cr 必须指定 ingress 必要参数,如果集群中没有默认的 IngressClass,必须制定 ingressClassName 参数。
apiVersion: cloudshell.cloudtty.io/v1alpha1 kind: CloudShell metadata: name: nginx-demo namespace: "cloudtty-system" spec: configmapName: "my-kubeconfig" runAsUser: "root" commandAction: "bash" exposureMode: "Ingress" pathPrefix: "/apis/cloudtty.io/" ttl: 100 once: false ingressConfig: ingressName: "cloudshell-ingress-demo" namespace: "cloudtty-system" ingressClassName: "nginx"
apiVersion: cloudshell.cloudtty.io/v1alpha1 kind: CloudShell metadata: name: vs-demo namespace: "cloudtty-system" spec: configmapName: "my-kubeconfig" runAsUser: "root" commandAction: "bash" exposureMode: "VirtualService" pathPrefix: "/apis/cloudtty.io/" ttl: 100 once: false virtualServiceConfig: virtualServiceName: "cloudshell-vs-demo" namespace: "cloudtty-system" gateway: "istio-system/istio-gateway" export_to: "istio-system"
-
特别鸣谢 这个项目的很多技术实现都是基于 https://github.com/tsl0922/ttyd,非常感谢 tsl0922 yudai 和社区,前端 UI 也是从 ttyd 项目衍生出来的,另外镜像内所使用的 ttyd 二进制也来源于这个项目。 CloudTTY 初衷是做一个小而美的项目,目前基本功能已经成熟,在将来我们会更加完善我们的功能,非常欢迎大家的试用,有任何的问题都在我们的社区提 issue。
添加助手微信
备注【cloudTTY】加入技术交流
本文作者 :陈文
「DaoCloud 道客」云原生开发工程师
DaoCloud 公司简介:「DaoCloud 道客」云原生领域的创新领导者,成立于 2014 年底,拥有自主知识产权的核心技术,致力于打造开放的云原生操作系统为企业数字化转型赋能。产品能力覆盖云原生应用的开发、交付、运维全生命周期,并提供公有云、私有云和混合云等多种交付方式。成立迄今,公司已在金融科技、先进制造、智能汽车、零售网点、城市大脑等多个领域深耕,标杆客户包括交通银行、浦发银行、上汽集团、东风汽车、海尔集团、屈臣氏、金拱门(麦当劳)等。目前,公司已完成了 D 轮超亿元融资,被誉为科技领域准独角兽企业。公司在北京、武汉、深圳、成都设立多家分公司及合资公司,总员工人数超过 400 人,是上海市高新技术企业、上海市“科技小巨人”企业和上海市“专精特新”企业,并入选了科创板培育企业名单。
未经允许不得转载:DaoCloud道客博客 » CloudTTY:下一代云原生开源 Cloud Shell
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK