K3s+Ambassador,强大的轻量级K8S解决方案

共 4273字,需浏览 9分钟

 ·

2020-08-20 17:48

作者简介

Richard Li是Datawire的联合创始人兼首席执行官。Datawire提供了多种流行的开源工具来加速Kubernetes的开发,包括Telepresence(本地开发)和Ambassador API Gateway。此外,Li还曾担任过多家技术公司的资深专家,比如Red Hat。


Kubernetes为微服务提供了一个强大的网络模式。该模式的主要部分之一是每个pod都有自己的IP地址,在集群内可以寻址。因此,每个Kubernetes集群通常有一个扁平的虚拟网络,使得外部host不能够直接访问。那意味着从集群外部的客户端路由流量到部署在集群内的服务需要进行一些额外的工作。对于路由流量到Kubernetes集群内部有各种策略,其中最常的方法是使用ingress controller。


Ingress Controllers


Ingress controller路由来自集群外部的流量,并负责将流量路由到集群内部的各个服务中。Ingress controller的名称来源与它可以处理Ingress资源,这是一种特殊类型的Kubernetes资源,它指定了这些路由规则。


Ingress controller构建在诸如HAProxy、NGINX、Traefik以及Envoy Proxy等代理上。Envoy Proxy起初由Lyft编写和部署,但发展至今已经成为CNCF的其中一个项目,数十家企业都对其做了贡献,包括亚马逊、Airbnb、Google、Pinterest以及VMware。


K3s、Rancher以及Ambassador


K3s是一个轻量级Kubernetes发行版,可以运行在资源有限环境,例如IoT或边缘设备以及部署笔记本上。对于将容器构建在Kubernetes上的团队来说,Rancher是一个完整的软件堆栈。无论是K3s还是Rancher均支持各类功能不同的Ingress controller。


在本文中,我们将了解如何在K3s上部署Ambassador。Ambassador是基于Envoy Proxy构建的开源Ingress controller和API网关。Ambassador向Kubernetes用户公开了许多Envoy Proxy的核心功能,包括零宕机重载、高级流量管理、服务网格集成(支持Consul、Linkerd和Istio)、可观察性、TLS终止和灵活的API用于速率限制和认证。Ambassador已经进行了诸多调整,以便在Kubernetes上获得最大的性能,并能够以最少的资源运行。


部署带有Ambassador的K3s


默认情况下,K3s将Traefik作为ingress controller。要使用Ambassador和Envoy Proxy需要按照以下步骤操作(这些步骤假设你已经安装好了K3s,如果你尚未安装请根据先快速指南进行安装:

https://rancher.com/docs/k3s/latest/en/quick-start/


1、 使用--disable treafik选项启动K3s。你可以通过编辑/etc/systemd/system/k3s.service进行此操作并且编辑ExecStart行:


ExecStart=/usr/local/bin/k3s \server \--disable traefik \


2、 重启K3s


sudo systemctl daemon-reloadsudo systemctl restart k3s.service


3、 通过应用标准的Ambassador Kubernetes manifest安装Ambassador(Ambassador也支持Helm安装:

https://www.getambassador.io/docs/latest/topics/install/helm/


kubectl apply -f https://www.getambassador.io/yaml/ambassador/ambassador-crds.yamlkubectl apply -f https://www.getambassador.io/yaml/ambassador/ambassador-rbac.yamlkubectl apply -f https://www.getambassador.io/yaml/ambassador/ambassador-service.yaml


4、 现在我们将部署一个简单的服务。保存以下Kubernetes YAML到文件中,称为quote.yaml.


---apiVersion: v1kind: Servicemetadata:name: quotespec:ports:    - name: httpport: 80targetPort: 8080selector:app: quote---apiVersion: apps/v1kind: Deploymentmetadata:name: quotespec:replicas: 1selector:matchLabels:    app: quotestrategy:type: RollingUpdatetemplate:metadata:    labels:    app: quotespec:    containers:    - name: backend    image: docker.io/datawire/quote:0.4.1    ports:    - name: http        containerPort: 8080


5、 部署quote服务到K3s:kubectl apply -f quote.yaml


6、 Ambassador支持标准的Kubernetes ingress资源进行路由。Ingress资源是单体对象,既包括Ingress本身的配置(如TLS配置),也包括路由。然而,官方的ingress标准相当有限,所以大多数Ambassador用户都依赖Mapping,Mapping是Ambassador特有的自定义资源定义。Mapping资源与Ambassador的部署完全解耦,使得Mapping资源只是用来描述请求路由。将下面的YAML配置保存到一个名为quote-mapping.yaml的文件中。


---apiVersion: getambassador.io/v2kind: Mappingmetadata:name: quote-backendspec:prefix: /give-me-a-quote/service: quote


7、 应用配置到集群:

kubectl apply -f quote-mapping.yaml


8、 获取Ambassador LoadBalancer 服务的IP地址:


$ sudo kubectl get svcNAME               TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)          AGEkubernetes         ClusterIP      10.43.0.1                443/TCP          60mambassador-admin   NodePort       10.43.134.74             8877:31032/TCP   5m15sambassador         LoadBalancer   10.43.61.86     10.128.0.111   80:31347/TCP     89squote              ClusterIP      10.43.129.249            80/TCP           31s


9、 复制IP地址并测试配置:

curl http:///give-me-a-quote/:


$ curl 10.128.0.111/give-me-a-quote/{"server": "harmonious-strawberry-z6onbsu2","quote": "A small mercy is nothing at all?","time": "2020-07-15T13:59:50.716712445Z"}


恭喜你!你已经成功使用Ambassador来路由一个HTTP请求到quote服务。


总  结


Ambassador提供了一套丰富的功能,包括认证、速率限制和丰富的协议支持(如TCP、WebSockets、gRPC、HTTP)。Ambassador还拥有一套经过测试的与其他云原生基础设施的集成,如监控系统和服务网格。K3s和Ambassador一起使用是一个强大的轻量级Kubernetes解决方案,非常适用于开发和生产。



推荐阅读

这应该是最适合国内用户的K3s HA方案

在K3s上使用Kong网关插件,开启K3s的无限可能!

如何使用k3OS和Argo进行自动化边缘部署?



About k3s


k3s 是目前全球用户量最大的 CNCF 认证轻量级 K8S 发行版。自 2019 年 3 月发布以来,备受全球开发者们关注。至今,GitHub Stars 数已超过 13,000,成为了开源社区最受欢迎的边缘计算 K8S 解决方案。


k3s 专为在资源有限的环境中运行 Kubernetes 的研发和运维人员设计,将满足日益增长的在边缘计算环境中运行在 x86、ARM64 和 ARMv7 处理器上的小型、易于管理的 Kubernetes 集群需求。k3s 的发布,为开发者们提供了以“Rancher 2.X + k3s”为核心的从数据中心到云到边到端的 K8S 即服务(Kubernetes-as-a-Service),推动 Kubernetes Everywhere。

扫码添加k3s中文社区助手

加入官方中文技术社区

官网:https://k3s.io

浏览 118
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报