# =============================================================================
# K3s CoreDNS 自訂配置 (GitOps 版本控制)
# =============================================================================
# 負責人: CIO
# 版本: v1.0
# 日期: 2026-03-26 (台北時區)
#
# 原則:
#   - 使用 K3s 原生 HelmChartConfig (不與 K3s Helm Controller 衝突)
#   - 禁止使用宿主機 systemd-resolved (127.0.0.53)
#   - 上游 DNS: Google (8.8.8.8) + Cloudflare (1.1.1.1)
#
# 部署方式:
#   CD Pipeline 會將此檔案 SCP 到 K3s Master:
#   /var/lib/rancher/k3s/server/manifests/coredns-custom.yaml
#   K3s 會自動偵測並 Apply
#
# 變更紀錄:
#   - v1.0 (2026-03-26): 初始版本，修復 DNS 解析問題 (ADR-011 Appendix B)
# =============================================================================

apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
  name: coredns
  namespace: kube-system
spec:
  valuesContent: |-
    # CoreDNS 伺服器配置
    servers:
      - zones:
          - zone: .
        port: 53
        plugins:
          # 錯誤日誌
          - name: errors

          # 健康檢查端點 (/health)
          - name: health
            configBlock: |-
              lameduck 5s

          # 就緒檢查端點 (/ready)
          - name: ready

          # Kubernetes 內部 DNS 解析
          - name: kubernetes
            parameters: cluster.local in-addr.arpa ip6.arpa
            configBlock: |-
              pods insecure
              fallthrough in-addr.arpa ip6.arpa
              ttl 30

          # 上游 DNS 伺服器 (禁止使用 /etc/resolv.conf)
          # 🔴 重要: 不使用宿主機 systemd-resolved (127.0.0.53)
          - name: forward
            parameters: . 8.8.8.8 1.1.1.1

          # DNS 快取 (30 秒)
          - name: cache
            parameters: 30

          # 偵測 DNS 迴圈
          - name: loop

          # 熱重載配置
          - name: reload

          # 負載平衡 (多個 Pod 回應)
          - name: loadbalance

    # 資源限制
    resources:
      limits:
        cpu: 100m
        memory: 128Mi
      requests:
        cpu: 50m
        memory: 64Mi

    # 自動水平擴展
    autoscaler:
      enabled: true
      min: 1
      max: 3
