<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>eks on </title>
    <link>/tags/eks/</link>
    <description>Recent content in eks on </description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Sun, 08 Nov 2026 09:00:00 +0800</lastBuildDate><atom:link href="/tags/eks/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>EKS 上多个服务共用一个 ALB</title>
      <link>/posts/eks-alb-ingressgroup-targetgroupbinding/</link>
      <pubDate>Sun, 08 Nov 2026 09:00:00 +0800</pubDate>
      
      <guid>/posts/eks-alb-ingressgroup-targetgroupbinding/</guid>
      <description>在 EKS 上用 AWS Load Balancer Controller（下称 LBC）暴露服务，默认每个 Ingress 都会得到一个独立的 ALB。服务一多，ALB 的个数和费用跟着涨。LBC 有三种共用 ALB 的办法：IngressGroup 把多个 Ingress 的规则合并到一个 ALB 上；TargetGroupBinding 让 ALB 和 Target Group 在集群外建好，LBC 只负责把 Pod 注册进去；Gateway API 用一个 Gateway 对应一个 ALB，各团队在自己的 namespace 里挂 HTTPRoute。文中的行为以 LBC v3.6.2（2026-10-25 发布）对应的文档为准。
默认一个 Ingress 一个 ALB 按 LBC 的文档，Ingress 默认不属于任何 IngressGroup，每个 Ingress 自成一个「implicit IngressGroup」，对应一个 ALB。下面这个 Ingress 会让 LBC 在 AWS 上建一个新的 internet-facing ALB：
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: order-ingress namespace: order-ns annotations: alb.</description>
    </item>
    
    <item>
      <title>Pod 短名称解析和 ndots:5 的查询放大</title>
      <link>/posts/k8s-pod-dns-short-name-ndots/</link>
      <pubDate>Sun, 08 Nov 2026 08:50:30 +0800</pubDate>
      
      <guid>/posts/k8s-pod-dns-short-name-ndots/</guid>
      <description>Pod 里 curl http://nginx-service 能通，curl http://order-service.production 也能通，配置和代码里很少有人写全 nginx-service.default.svc.cluster.local.。把短名称补全成 FQDN 的是容器里 C 库的解析器：kubelet 给 Pod 写好 /etc/resolv.conf，解析器按里面的 search 和 ndots 决定一个名字先拼哪个后缀、什么时候按原样查。同一套规则作用在外部域名上，就会多出一串注定失败的查询。
下面的输出来自 kind 起的 Kubernetes 1.37.0 单节点集群。客户端 Pod 主要用 debian:trixie-slim（glibc 2.41），对照组用 alpine:3.22（musl 1.2.5），都用 getent ahosts 解析，它走 getaddrinfo，每一轮 A 和 AAAA 各发一个查询。CoreDNS 打开了 log 插件并缩到 1 个副本，日志的顺序就是查询的顺序，下面的日志只留了查询类型、名字、返回码、标志位和耗时。集群里建了两个 Service：default 下的 nginx-service 和 production 下的 order-service。
kubelet 写进 Pod 的 resolv.conf Pod 不写 dnsPolicy 时用的是 ClusterFirst（DNS for Services and Pods），kubelet 按它生成 /etc/resolv.conf：
kubectl exec client -- cat /etc/resolv.</description>
    </item>
    
  </channel>
</rss>
