体验过chatgpt,豆包,Qwen,和Gemini的深度研究之后,个人感觉Gemini是最好的。 首先会生成研究方向,搜索关键字,然后可能是通过tool call的方式抓取相关内容,生成的结果可以用来创建到Web Page(可交互),Infographic,Quiz和音频。


k8s 中 prometheus的 token 是如何访问经过认证的kube-controller-manager的/metrics的?

答案是:证书验证(TLS)和Token授权(RBAC)是两个独立但连续的步骤。kube-controller-manager自己处理TLS握手,但会将授权决策委托kube-apiserver

  1. 认证 (Authentication) - 使用 TokenReview

    • kube-controller-manager接收到Token后,它会创建一个TokenReview对象。这个对象包含了它从Prometheus收到的原始Token。
    • 它向kube-apiserver/apis/authentication.k8s.io/v1/tokenreviews端点发起一个请求,内容就是这个TokenReview对象。
    • kube-apiserver收到请求后,会验证这个Token的签名和有效性。如果Token有效,kube-apiserver会在TokenReview对象的状态(status)字段中填充该Token对应的用户信息(用户名、UID、所属组等),并返回给kube-controller-manager
    • 现在,kube-controller-manager知道了这个请求的发起者是谁(例如,system:serviceaccount:monitoring:prometheus-k8s)。
  2. 授权 (Authorization) - 使用 SubjectAccessReview

    • 在知道了请求者的身份后,kube-controller-manager需要确认这个身份是否有权限执行请求的操作(即对/metrics路径进行GET操作)。
    • 它会创建一个SubjectAccessReview对象。这个对象里包含了上一步获取到的用户信息以及本次请求试图执行的操作(verb: "get", nonResourceURL: "/metrics")。
    • 它向kube-apiserver/apis/authorization.k8s.io/v1/subjectaccessreviews端点发起请求。
    • kube-apiserver收到请求后,会查询集群中所有的RBAC规则(Role, ClusterRole, RoleBinding, ClusterRoleBinding),判断这个用户是否有权限执行该操作。
    • kube-apiserver将检查结果(允许或拒绝)填充到SubjectAccessReview对象的状态字段中,并返回给kube-controller-manager
  3. 最终决策

    • kube-controller-manager收到SubjectAccessReview的响应后,如果结果是“允许”,它就会向Prometheus返回/metrics的数据。
    • 如果结果是“拒绝”,它会向Prometheus返回403 Forbidden错误。

这保证了整个集群的认证授权策略是统一和集中的,避免了每个组件各自为政带来的安全风险和管理复杂性。


k8s 为什么要设计service/proxy的子资源?

AI生成了4个理由,我觉得唯一有点说服力的也就第三条。

  1. 提供稳定的编程接口(Programmatic Access) 通过提供一个标准的 RESTful API 端点(GET /api/v1/namespaces/{namespace}/services/{service-name}:{port-name}/proxy/{path}),Kubernetes 为自动化工具和自定义控制器(Controller)提供了一个与内部服务交互的稳定接口。

一个经典案例就是 Kubernetes 早期的监控组件 Heapster(现在已被 Metrics Server 取代),它就是通过 service/proxy 接口去轮询各个组件(如 Kubelet)的 metrics 端点来采集监控数据的。这使得集群扩展组件的开发变得更加简单和标准化。

  1. 精细化的权限控制(RBAC)
  2. 简化开发与调试工作
  3. 符合逻辑的 RESTful API 设计

腾讯云的云开发

➜  QwQ-32B free -mh
               total        used        free      shared  buff/cache   available
Mem:           128Gi       3.1Gi       123Gi          0B       1.3Gi       124Gi
Swap:             0B          0B          0B
➜  QwQ-32B lscpu
Architecture:            x86_64
  CPU op-mode(s):        32-bit, 64-bit
  Address sizes:         52 bits physical, 48 bits virtual
  Byte Order:            Little Endian
CPU(s):                  128
  On-line CPU(s) list:   0-127
Vendor ID:               AuthenticAMD
  Model name:            AMD EPYC 9754 128-Core Processor
    CPU family:          25
    Model:               160
    Thread(s) per core:  2
    Core(s) per socket:  64
    Socket(s):           1
    Stepping:            2
    BogoMIPS:            4500.04
    Flags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good no
                         pl nonstop_tsc cpuid extd_apicid amd_dcm tsc_known_freq pni pclmulqdq monitor ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c 
                         rdrand hypervisor lahf_lm cmp_legacy cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw topoext perfctr_core invpcid_single ibpb vmmcall fsgsbase tsc_adjust bmi1 avx2 sm
                         ep bmi2 erms invpcid avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 avx512_bf16 clzero xsaveerptr w
                         bnoinvd arat avx512vbmi umip avx512_vbmi2 vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq rdpid fsrm
Virtualization features: 
  Hypervisor vendor:     KVM
  Virtualization type:   full
Caches (sum of all):     
  L1d:                   2 MiB (64 instances)
  L1i:                   2 MiB (64 instances)
  L2:                    64 MiB (64 instances)
  L3:                    128 MiB (8 instances)
NUMA:                    
  NUMA node(s):          1
  NUMA node0 CPU(s):     0-127
Vulnerabilities:         
  Itlb multihit:         Not affected
  L1tf:                  Not affected
  Mds:                   Not affected
  Meltdown:              Not affected
  Mmio stale data:       Not affected
  Retbleed:              Not affected
  Spec store bypass:     Vulnerable
  Spectre v1:            Mitigation; usercopy/swapgs barriers and __user pointer sanitization
  Spectre v2:            Mitigation; Retpolines, IBPB conditional, STIBP disabled, RSB filling, PBRSB-eIBRS Not affected
  Srbds:                 Not affected
  Tsx async abort:       Not affected