洛神云网络集中式网关ACMG最佳实践

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介: 洛神云网络集中式网关ACMG最佳实践


上次我们介绍了集中式网关的一些内容,主要包括集中式网关是什么?怎么使用?有哪些优势?ACMG是专门为东西向流量打造的集中式七层网关,使用无侵入式引流的方式,在满足用户流量治理需求的同时,相比Sidecar模式在资源利用率、运维复杂度、性能和时延等方面具有优势。

image.png

总的来看,业内也逐渐意识到了这个问题,逐渐演进出了其他方案,比如Ambient、AWS VPC Lattice都推出了与Sidecar不同的方案。



自上次集中式网关方案发布后,收到了一些大家提出的问题,在这里挑选了一些典型问题,统一进行解答,感谢大家的关注。Q:集中式网关和Sidecar、Ambient有什么区别?

A:集中式网关是专门为服务网格场景打造的集中式七层网关,整个集群的东西向流量都可以由集中式网关接管,无需Sidecar;在满足用户流量治理需求的同时,相比Sidecar、Ambient在资源利用率、运维复杂度、性能和时延等方面具有优势。

Q:集中式网关的转发底座是什么?

A:集中式网关是基于Envoy进行开发设计的。

Q:集中式网关适合哪种业务使用?

A

  • 业务规模较大,对Sidecar消耗的资源较为敏感。
  • 运维复杂的ServiceMesh场景,出现问题时排查、解决都较为困难。
  • 尝试了目前市面上的方案都不太满足自己的需求,欢迎来试用集中式网关

Q:集中式网关打算一直坚持开源吗?

A:是的,我们坚持开源,不会改变。



下面介绍一下ACMG的安装以及使用方法,按照下面的教程可以体验ACMG的基本流量接管功能以及一些拓展的高级用法,同样支持开发者们基于ACMG的源代码进行二次开发。

3.1 编译代码


$ make build

3.2 编译镜像


$ make docker
$ docker images

经过编译,得到下图所示的docker镜像:


localhost:5000/app_sidecar_centos_7        latest      localhost:5000/app_sidecar_debian_11       latest      localhost:5000/app_sidecar_ubuntu_xenial   latest      localhost:5000/app_sidecar_ubuntu_jammy    latest      localhost:5000/app                         latest      localhost:5000/install-cni                 latest      localhost:5000/proxyv2                     latest      localhost:5000/operator                    latest      localhost:5000/pilot                       latest      localhost:5000/istioctl                    latest      localhost:5000/acmg                        latest      localhost:5000/ext-authz                   latest

3.3 安装

Istio有多种安装模式,我们选择acmg(集中式网关)的模式进行安装。


$ ./out/linux_amd64/istioctl profile listIstio configuration profiles:acmgdefaultdemoemptyexternalminimalopenshiftpreview

$ ./out/linux_amd64/istioctl install --set profile=acmg

当上面的命令执行完毕,可以检查一下安装情况。

$ kubectl get pods -n istio-system
NAME                               READY   STATUS    RESTARTS   AGEacmg-controller-798cbd6b9d-x4fmd   1/1     Running   0          5m32sacmg-gateway-66f9f86fcd-xx9qg      1/1     Running   0          3m8sistiod-945b9f699-sm4js             1/1     Running   0          5m31s

可以看到acmg-controller,acmg-gateway,istiod三个重要的角色已经就绪,其中acmg-gateway可以接管整个集群的东西向流量。

3.4 使用

以服务default命名空间里的helloworld为例,介绍一下如何使用集中式网关。

apiVersion: networking.istio.io/v1alpha3kind: VirtualServicemetadata:  name: helloworld-acmg  namespace: istio-systemspec:  enableAcmg: true  hosts:  - "*"  http:  - match:    - uri:        exact: /hello    route:    - destination:        host: helloworld.default.svc.cluster.local

其中enableAcmg字段表示此虚拟服务将托管到集中式网关中。发起对helloworld服务的访问,可以发现流量是经过集中式网关到达的helloworld服务。

3.5 卸载


$ ./out/linux_amd64/istioctl uninstall --purge

当上面的命令执行完毕,检查一下卸载情况。

$ kubectl get pods -n istio-systemNo resources found.

可以看到,集中式网关的相关资源已经全部清理完毕。



4.1 流量分发

创建DestinationRule,指定不同版本的helloworld服务。

apiVersion: networking.istio.io/v1alpha3kind: DestinationRulemetadata:  name: helloworld-acmg  namespace: istio-systemspec:  host: helloworld.default.svc.cluster.local  trafficPolicy:    loadBalancer:      simple: ROUND_ROBIN  subsets:    - name: v1      labels:        version: v1    - name: v2      labels:        version: v2

创建VirtualService,引用不同版本的helloworld服务。

apiVersion: networking.istio.io/v1alpha3kind: VirtualServicemetadata:  name: helloworld-acmg  namespace: istio-systemspec:  enableAcmg: true  hosts:  - "*"  http:  - match:    - uri:        exact: /hello    route:    - destination:        host: helloworld.default.svc.cluster.local        subset: v1      weight: 90    - destination:        host: helloworld.default.svc.cluster.local        subset: v2      weight: 10

4.2 故障注入

例如,我们可以为访问 helloworld 服务千分之一的请求配置一个 5 秒的延迟访问:

apiVersion: networking.istio.io/v1alpha3kind: VirtualServicemetadata:  name: helloworld-acmg  namespace: istio-systemspec:  enableAcmg: true  hosts:  - "*"  http:  - fault:      delay:        percentage:          value: 0.1        fixedDelay: 5s  - match:    - uri:        exact: /hello    route:    - destination:        host: helloworld.default.svc.cluster.local

4.3 服务熔断

例如下面的设置将helloworld服务v1子集的工作负载并发连接数限制为 100:

apiVersion: networking.istio.io/v1alpha3kind: DestinationRulemetadata:  name: helloworld-acmg  namespace: istio-systemspec:  host: helloworld.default.svc.cluster.local  trafficPolicy:    loadBalancer:      simple: ROUND_ROBIN  subsets:    - name: v1      labels:        version: v1      trafficPolicy:        connectionPool:          tcp:            maxConnections: 100    - name: v2      labels:        version: v2



云原生理念让我们受益良多,但是也带来了一些问题,比如原先的单体式应用变成了多个服务单元,这使得服务发现与路由规则变得更为复杂了;而且通常情况下,东西向流量的访问也是默认使用http,当攻击者绕过防火墙进入K8S集群,那么整个集群内的服务都会直接暴露给攻击者。这时候就要考虑每个服务如何安全地与集群内其他服务进行通信。

image.png

相关文章
|
6月前
|
网络协议 安全 网络安全
计算机网络:IP地址、子网掩码、网关都是什么?
计算机网络:IP地址、子网掩码、网关都是什么?
531 0
|
6月前
|
存储 安全 PHP
【100天精通Python】Day48:Python Web开发_WSGI网络服务器网关接口与使用
【100天精通Python】Day48:Python Web开发_WSGI网络服务器网关接口与使用
65 0
|
21小时前
|
监控 负载均衡 网络协议
|
27天前
|
负载均衡 Cloud Native 安全
云原生最佳实践系列 6:MSE 云原生网关使用 JWT 进行认证鉴权
本文档介绍了如何在 MSE(Microservices Engine)云原生网关中集成JWT进行全局认证鉴权。
|
6月前
|
存储 网络协议 安全
IP地址、MAC地址、互联网、WLAN、运营商、子网掩码、网络地址、网段、网关、集线器、光纤、基站
IP地址、MAC地址、互联网、WLAN、运营商、子网掩码、网络地址、网段、网关、集线器、光纤、基站
76 0
|
2月前
|
弹性计算 Linux 网络安全
三步搭建VPC专有网络NAT网关,配置SNAT和DNAT规则(补充版)
申明:该文档参考于用户 “帅宝宝”的文档进行的优化,新增永久生效的方式
291 1
|
5月前
|
网络协议 网络架构
百度搜索:蓝易云【网络:IP地址、子网掩码、网络地址、广播地址、网段、网关详解。】
这些概念是构建和理解网络的基础,它们在网络通信和地址分配中起着重要的作用。了解和正确配置这些概念对于建立和管理网络是至关重要的。
43 0
|
8月前
|
Kubernetes 安全 Serverless
为什么 Higress 是 Knative 入口网关的最佳实践
Knative Serving 是一款基于 K8s 的 Serverless 开源平台,用于构建和管理现代化、可拓展、流量驱动、无服务器的应用程序。本文重点关注 Knative 网络层能力的实现。
397 12
为什么 Higress 是 Knative 入口网关的最佳实践
|
9月前
|
运维 Kubernetes Cloud Native
|
9月前
|
监控 网络协议 安全
网络:IP地址、子网掩码、网络地址、广播地址、网段、网关
网络:IP地址、子网掩码、网络地址、广播地址、网段、网关
694 1
网络:IP地址、子网掩码、网络地址、广播地址、网段、网关