防止35岁只能送外卖(大概吧)之一起成为云架构师吧-01

背景 导师如何骗我看文档

聊了行业就业的问题,导师表示35岁还能有分工,干开发大概率是不行的,不如年轻人(学习快、工资低、自愿加班、少猝死),基本上混的下去的是行业架构师。

关于怎么成为真的有货的架构师,导师推荐我先看一下微软的架构文档,然后才能有话能和行业的实际客户聊落地的事情。

愿自己35岁之际,积累了行业的经验,而不是某个新语言SDK的开发,前者我愚钝地认为,算是自己独特于,特别是年轻人毕业人的价值吧。

当然其实现实情况更多是资本家管你有没有价值,看你老了直接毕业再说,毕竟全世界大家都只是草台班子。

我想这既然是要记录,懒得折腾博客,那就论坛搞七捻三一下吧哈哈哈。


首先还是关注核心服务落地的组件,K8S,微软的话,是叫AKS,是个PaaS服务。

这篇文章算是教导人怎么比较成熟地用AKS,暂且我学习一下,说不定能有所收获。


网络拓扑应该怎么规划

Hub

遵循 hub-spoke 模式,其实就是一个中心网,关联好几个放射子网。
hub vnet网和spoke vnet之间的打通,需要采用 vnet peering实现,所以千万vnet之间不能有ip overlapping。

所有网络流量先到达Hub, Hub负责:
1、防御网络攻击。

2、Bastion是微软的网页跳板机,它关联的子网放Hub,方便跳板机访问各个spoke。
——这个还是安全的,因为跳板机要去web 页面,进行MFA的微软账户登录,并且azure有权限、有RDP账密才能用。
——而且Bastion它必须专用子网,就是Vnet里单独划一个subnet给它不能丢其他资源。

3、部署虚拟网关,方便企业走S2S VPN 或者 ER硬件专线,网络打通(私有ip寻址)企业本地网络 和 azure 网络。
——也是得专用子网
——所以来自企业内部的流量,也得先经过Hub的安全过滤,合理。
image

Spoke

在某个应用的AKS spoke vnet里,网络流量利用内网ip寻址(通过private link 功能实现),到达AKS的大门——ingress k8s内部nlb。
image

文档里建议aks ingress要用traefik,它这么提到:

To route and distribute traffic, Traefik is the ingress controller that is going to fulfill the Kubernetes ingress resources. The Azure internal load balancers exist in this subnet. For more information, see Use an internal load balancer with Azure Kubernetes Service (AKS).
为了路由和分发流量,Traefik 是一个入口控制器,将执行 Kubernetes 入口资源。Azure 内部负载平衡器存在于该子网中。有关详细信息,请参阅使用 Azure Kubernetes 服务 (AKS) 的内部负载平衡器。

首先Traefik是个啥玩意?
Traefik 是个开源的、比较成熟的k8s ingress项目,专门拿来反向代理和负载均衡器(有点像k8s的NGINX),就是ingress controller的一个实现。

我理解要用traefik主要为了它对service自动发现。

什么是ingress对service的自动发现

首先,咱们先理解一下网络流量咋走的:

互联网 → LoadBalancer(通常是一个 LoadBalancer 类型的 Service) → Ingress 控制器 → Service → Pod

  • 路径:Ingress 控制器 → Service
  • 解释:Ingress 控制器读取 Ingress 资源中的路由规则,将请求转发到指定的 Service。Ingress controller常见的实现,包括 NGINX Ingress Controller、Traefik 等。

然后,

  • 路径:Service → Pod
  • 解释:Service 使用标签选择器(selector)关联对应的 Pod,并将流量负载均衡地分发到这些 Pod。Kubernetes 本身 Service 会自动管理与其关联的 Pod,不需要traefik这些东西更新路由规则。

所以,traefik自动帮你完成的是 Ingress 控制器 → Service 这一段的自动发现,
让你不用手动改ingress的规则。

ingress规则例子:基于URL的hostname,转发到不同service

apiVersion: traefik.containo.us/v1alpha1  # 指定 Traefik Custom Resource Definition (CRD) 的 API 版本
kind: IngressRoute  # 定义资源的类型为 IngressRoute
metadata:
  name: example-ingressroute  # IngressRoute 资源的名称为 example-ingressroute
spec:
  entryPoints:
    - web  # 定义入口点,这里是 web,表示 HTTP 请求的入口
  routes:
  - match: Host(`app1.example.com`)  # 匹配主机名为 app1.example.com 的请求
    kind: Rule  # 规则类型,表示这是一个路由规则
    services:
    - name: app1-service  # 将请求转发到名为 app1-service 的服务
      port: 80  # 服务的端口号为 80
  - match: Host(`app2.example.com`)  # 匹配主机名为 app2.example.com 的请求
    kind: Rule  # 规则类型,表示这是一个路由规则
    services:
    - name: app2-service  # 将请求转发到名为 app2-service 的服务
      port: 80  # 服务的端口号为 80

entryPoints

entryPoints 是 Traefik 用来定义哪些端口和协议(例如 HTTP 或 HTTPS)的监听口,每个 entryPoint 通常会对应一个端口和一个协议。

那我为啥要用traefik,不用azure 默认给的L4 nlb呢?

  • 用trafik的好处:
    ——这玩意是L7 的,所以它可以负责TLS/HTTPS证书的加解密,基于URL、header的路由(其实就是HTTP应用层协议的路由)。
    ——可以自动发现 Kubernetes 服务和 Ingress 资源。azure L4 nlb只能自动发现 类型为 LoadBalancer 的服务。

  • 坏处:你的自己通过helm部署traefik。

其实针对 aks的L7 ingress,azure有Azure Application Gateway Ingress Controller (AGIC) ,就是把azure的L7 PaaS NLB,集成到AKS。
但是AGIC也没有 自动发现K8S服务 的功能。

AKS的镜像和密钥走azure内网寻址

AKV存放证书和密钥。
ACR存放容器镜像。另外,AKS可以和若干个ACR进行绑定(通过Azure CLI),其实就是给了ACR的RBAC里,注册了这个AKS一个managed services 身份,这个身份具备镜像拉去权限。这样就不需要某个员工的账号来拉去镜像了。
——ACR有个坑爹的地方就是它只有高级版才能关闭互联网网络访问。

image

这么多个Vnet,我IP 池范围怎么分配

  • AKS 会定期更新node (在AKS的configuration可以看到有没有启用自动更新)。
    ——升级过程中,AKS 会创建一个节点来临时托管 pod,同时升级节点会被封锁并排空。该临时节点从aks cluster关联的子网中分配一个 IP 地址。 (所以说azure算是安全地逐个node升级)。如果子网ip紧张,临时node就拿不到ip,导致自动更新失败。
    ——下面的ip被azure保留了,你没法用:
  • 每个子网会保留五个 IP 地址, 即 x.x.x.0 ~ .3 和 x.x.x.255

图里某个AKS spoke,完整的subnet分配

  • AKS System Nodepool and AKS User Nodepool subnet
  • AKS Internal Load Balancer subnet
  • Azure Application Gateway subnet
  • Private Link Endpoint subnet
    每个subnet都单独配备NSG,NSG就是azure 的防火墙。

关于node SKU配置

systempool的SKU可以低一点,省钱。
userpool的SKU高一点,降低公共服务的整体占用,公共服务不是说的你应用的公用服务,是K8S自带的,比如监控和日志记录这种。
——userpool至少部署两个节点。不然就单点故障了。
——其实AKS的SLA也才99.9% = =。。。 开了zone av是99.95%。。。

AKS应该怎么访问Azure其他资源比如storage account

建议给这个AKS配置managed identity,然后把这个managed identity配置到对应资源的RBAC里。

…updating

6 Likes

还没到35就要被裁了

1 Like

收藏先

1 Like

mark一下

1 Like

不让我写代码等于让我死 :neutral_face:

1 Like

感谢分享

:smiling_face_with_tear:我发现我水平甚至都看不太懂这里面说的东西。。。唉

还架构师,只能说你还没工作经历。醒醒

:tieba_008:导师真的了解吗

看不懂啊,我只能去送外卖了

云不了一点 :smiling_face_with_tear:太难了

:clown_face: 看不懂了

放弃吧,跟我一起送外卖吧,每顿饭都不一样 很爽的

1 Like

这种大型复杂的环境结构,少则五年,多则十年后就剩下名字了。

估计是没活给我 骗我看文档吧哈哈哈哈哈哈哈

你这确定是架构,而不是修网的 :face_holding_back_tears:

金丝雀???

感谢佬分享