Skip to content

antony@notes:~/misc$ cat "20260629.md"

20260629

2026-06-29· misc

20260629

# us-tkcdc-01

$ kubectl get nodes -o wide
NAME                 STATUS   ROLES           AGE   VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE                         KERNEL-VERSION      CONTAINER-RUNTIME
tkdt-control-plane   Ready    control-plane   19h   v1.34.3   172.22.16.1   <none>        Debian GNU/Linux 12 (bookworm)   6.8.0-124-generic   containerd://2.2.0
tkdt-master1         Ready    <none>          19h   v1.34.3   172.22.16.2   <none>        Debian GNU/Linux 12 (bookworm)   6.8.0-124-generic   containerd://2.2.0
tkdt-worker1         Ready    <none>          19h   v1.34.3   172.22.16.3   <none>        Debian GNU/Linux 12 (bookworm)   6.8.0-124-generic   containerd://2.2.0
tkdt-worker2         Ready    <none>          19h   v1.34.3   172.22.16.4   <none>        Debian GNU/Linux 12 (bookworm)   6.8.0-124-generic   containerd://2.2.0
tkdt-worker3         Ready    <none>          19h   v1.34.3   172.22.16.5   <none>        Debian GNU/Linux 12 (bookworm)   6.8.0-124-generic   containerd://2.2.0

$ kubectl describe nodes | grep -i podcidr
PodCIDR:                      10.244.16.0/25
PodCIDRs:                     10.244.16.0/25
PodCIDR:                      10.244.16.128/25
PodCIDRs:                     10.244.16.128/25
PodCIDR:                      10.244.17.0/25
PodCIDRs:                     10.244.17.0/25
PodCIDR:                      10.244.17.128/25
PodCIDRs:                     10.244.17.128/25
PodCIDR:                      10.244.18.0/25
PodCIDRs:                     10.244.18.0/25

$ kubectl -n kube-system get cm kubeadm-config -o yaml | grep serviceSubnet
      serviceSubnet: 10.98.16.0/24

sudo route add -net 172.22.26.0 netmask 255.255.255.128 gw 192.168.11.102

sudo route add -net 10.244.17.0 netmask 255.255.255.128 gw 172.22.16.3
sudo route add -net 10.244.17.128 netmask 255.255.255.128 gw 172.22.16.4
sudo route add -net 10.244.18.0 netmask 255.255.255.128 gw 172.22.16.5
sudo route add -net 10.244.25.0 netmask 255.255.255.128 gw 192.168.11.102
sudo route add -net 10.244.25.128 netmask 255.255.255.128 gw 192.168.11.102
sudo route add -net 10.244.26.0 netmask 255.255.255.128 gw 192.168.11.102

sudo route add -net 10.98.16.0 netmask 255.255.255.0 gw 172.22.16.5
sudo route add -net 10.98.24.0 netmask 255.255.255.0 gw 192.168.11.102


kubectl apply -f - <<'EOF'
apiVersion: v1
kind: Service
metadata:
  name: nginx-tkdt
  labels:
    app: nginx-tkdt
spec:
  clusterIP: None
  selector:
    app: nginx-tkdt
  ports:
    - port: 80
      name: web
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: nginx-tkdt
spec:
  serviceName: nginx-tkdt
  replicas: 2
  selector:
    matchLabels:
      app: nginx-tkdt
  template:
    metadata:
      labels:
        app: nginx-tkdt
    spec:
      containers:
        - name: nginx-tkdt
          image: nginx
          ports:
            - containerPort: 80
              name: web
EOF

$ kubectl get pods -o wide
NAME           READY   STATUS    RESTARTS   AGE   IP            NODE           NOMINATED NODE   READINESS GATES
nginx-tkdt-0   1/1     Running   0          36s   10.244.17.5   tkdt-worker1   <none>           <none>
nginx-tkdt-1   1/1     Running   0          33s   10.244.18.6   tkdt-worker3   <none>           <none>

$ kubectl get svc nginx-tkdt
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
nginx-tkdt   ClusterIP   None         <none>        80/TCP    44s

$ curl -sI http://10.244.17.5 | head -n 1
HTTP/1.1 200 OK

$ curl -sI http://10.244.26.5 | head -n 1
HTTP/1.1 200 OK

$ dig @10.98.16.10 nginx-tkdt-0.nginx-tkdt.default.svc.tkdt.k8s +short
10.244.17.5
$ dig @10.98.16.10 nginx-tkdt-1.nginx-tkdt.default.svc.tkdt.k8s +short
10.244.18.6
$ dig @10.98.24.10 nginx-tkndt-0.nginx-tkndt.default.svc.tkndt.k8s +short
10.244.26.5
$ dig @10.98.24.10 nginx-tkndt-1.nginx-tkndt.default.svc.tkndt.k8s +short
10.244.25.5

$ kubectl -n kube-system edit cm coredns
        transfer tkdt.k8s {      # 其他人可以跟我用 AXFR 同步
           to *                  # 來源 IP 問題,先開放給所有人
        }
        secondary tkndt.k8s {    # 我向 tkndt 同步的 domain
           transfer from 10.98.24.10  # tkndt 的 coredns svc ip
        }

$ kubectl -n kube-system rollout restart deployment coredns

$ kubectl -n kube-system get pods -l k8s-app=kube-dns
NAME                       READY   STATUS    RESTARTS   AGE
coredns-7d597fb798-5zx2n   1/1     Running   0          16s
coredns-7d597fb798-7xmg7   1/1     Running   0          16s

$ dig @10.98.16.10 nginx-tkndt-0.nginx-tkndt.default.svc.tkndt.k8s +short
10.244.26.5
$ dig @10.98.16.10 nginx-tkndt-1.nginx-tkndt.default.svc.tkndt.k8s +short
10.244.25.5

$ kubectl exec nginx-tkdt-0 -- curl -sI nginx-tkndt-0.nginx-tkndt.default.svc.tkndt.k8s | head -n 1
HTTP/1.1 200 OK

$ kubectl exec nginx-tkdt-0 -- curl -sI nginx-tkndt-1.nginx-tkndt.default.svc.tkndt.k8s | head -n 1
HTTP/1.1 200 OK

==========================================================================

# us-tkcdc-02

$ kubectl get nodes -o wide
NAME                  STATUS   ROLES           AGE   VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE                         KERNEL-VERSION      CONTAINER-RUNTIME
tkndt-control-plane   Ready    control-plane   18h   v1.34.3   172.22.26.1   <none>        Debian GNU/Linux 12 (bookworm)   6.8.0-124-generic   containerd://2.2.0
tkndt-master1         Ready    <none>          18h   v1.34.3   172.22.26.2   <none>        Debian GNU/Linux 12 (bookworm)   6.8.0-124-generic   containerd://2.2.0
tkndt-worker1         Ready    <none>          18h   v1.34.3   172.22.26.3   <none>        Debian GNU/Linux 12 (bookworm)   6.8.0-124-generic   containerd://2.2.0
tkndt-worker2         Ready    <none>          18h   v1.34.3   172.22.26.4   <none>        Debian GNU/Linux 12 (bookworm)   6.8.0-124-generic   containerd://2.2.0
tkndt-worker3         Ready    <none>          18h   v1.34.3   172.22.26.5   <none>        Debian GNU/Linux 12 (bookworm)   6.8.0-124-generic   containerd://2.2.0

$ kubectl describe nodes | grep -i podcidr
PodCIDR:                      10.244.24.0/25
PodCIDRs:                     10.244.24.0/25
PodCIDR:                      10.244.24.128/25
PodCIDRs:                     10.244.24.128/25
PodCIDR:                      10.244.25.0/25
PodCIDRs:                     10.244.25.0/25
PodCIDR:                      10.244.25.128/25
PodCIDRs:                     10.244.25.128/25
PodCIDR:                      10.244.26.0/25
PodCIDRs:                     10.244.26.0/25

$ kubectl -n kube-system get cm kubeadm-config -o yaml | grep serviceSubnet
      serviceSubnet: 10.98.24.0/24

sudo route add -net 172.22.16.0 netmask 255.255.255.128 gw 192.168.11.101

sudo route add -net 10.244.25.0 netmask 255.255.255.128 gw 172.22.26.3
sudo route add -net 10.244.25.128 netmask 255.255.255.128 gw 172.22.26.4
sudo route add -net 10.244.26.0 netmask 255.255.255.128 gw 172.22.26.5
sudo route add -net 10.244.17.0 netmask 255.255.255.128 gw 192.168.11.101
sudo route add -net 10.244.17.128 netmask 255.255.255.128 gw 192.168.11.101
sudo route add -net 10.244.18.0 netmask 255.255.255.128 gw 192.168.11.101

sudo route add -net 10.98.16.0 netmask 255.255.255.0 gw 192.168.11.101
sudo route add -net 10.98.24.0 netmask 255.255.255.0 gw 172.22.26.5

kubectl apply -f - <<'EOF'
apiVersion: v1
kind: Service
metadata:
  name: nginx-tkndt
  labels:
    app: nginx-tkndt
spec:
  clusterIP: None
  selector:
    app: nginx-tkndt
  ports:
    - port: 80
      name: web
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: nginx-tkndt
spec:
  serviceName: nginx-tkndt
  replicas: 2
  selector:
    matchLabels:
      app: nginx-tkndt
  template:
    metadata:
      labels:
        app: nginx-tkndt
    spec:
      containers:
        - name: nginx-tkndt
          image: nginx
          ports:
            - containerPort: 80
              name: web
EOF

$ kubectl get pods -o wide
NAME            READY   STATUS    RESTARTS   AGE   IP            NODE            NOMINATED NODE   READINESS GATES
nginx-tkndt-0   1/1     Running   0          29s   10.244.26.5   tkndt-worker3   <none>           <none>
nginx-tkndt-1   1/1     Running   0          23s   10.244.25.5   tkndt-worker1   <none>           <none>

$ kubectl get svc nginx-tkndt
NAME          TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
nginx-tkndt   ClusterIP   None         <none>        80/TCP    90s

$ curl -sI http://10.244.17.5 | head -n 1
HTTP/1.1 200 OK

$ curl -sI http://10.244.26.5 | head -n 1
HTTP/1.1 200 OK

$ dig @10.98.24.10 nginx-tkndt-0.nginx-tkndt.default.svc.tkndt.k8s +short
10.244.26.5
$ dig @10.98.24.10 nginx-tkndt-1.nginx-tkndt.default.svc.tkndt.k8s +short
10.244.25.5
$ dig @10.98.16.10 nginx-tkdt-0.nginx-tkdt.default.svc.tkdt.k8s +short
10.244.17.5
$ dig @10.98.16.10 nginx-tkdt-1.nginx-tkdt.default.svc.tkdt.k8s +short
10.244.18.6

$ kubectl -n kube-system edit cm coredns
        transfer tkndt.k8s {      # 其他人可以跟我用 AXFR 同步
           to *                  # 來源 IP 問題,先開放給所有人
        }
        secondary tkdt.k8s {    # 我向 tkndt 同步的 domain
           transfer from 10.98.16.10  # tkndt 的 coredns svc ip
        }

$ kubectl -n kube-system rollout restart deployment coredns

$ kubectl -n kube-system get pods -l k8s-app=kube-dns
NAME                       READY   STATUS    RESTARTS   AGE
coredns-7446d9745d-5pjh7   1/1     Running   0          11s
coredns-7446d9745d-5pxtj   1/1     Running   0          11s

$ $ dig @10.98.24.10 nginx-tkdt-0.nginx-tkdt.default.svc.tkdt.k8s +short
10.244.17.5

$ dig @10.98.24.10 nginx-tkdt-1.nginx-tkdt.default.svc.tkdt.k8s +short
10.244.18.6

$ kubectl exec nginx-tkndt-0 -- curl -sI nginx-tkdt-0.nginx-tkdt.default.svc.tkdt.k8s | head -n 1
HTTP/1.1 200 OK

$ kubectl exec nginx-tkndt-0 -- curl -sI nginx-tkdt-1.nginx-tkdt.default.svc.tkdt.k8s | head -n 1
HTTP/1.1 200 OK