Score:0

การรวม Kubernetes ด้วย Wireguard

ธง us
TRW

ฉันมีสถานการณ์ที่มีโหนดต่างๆ มากมาย บางตัวมี IPv4 สาธารณะ บางตัวมี IPv6 บางตัวเป็น dual stack ดังนั้นฉันจึงสร้างเครือข่าย wireguard (10.11.12.0/24) เพื่อให้เพื่อนทุกคนสามารถเข้าถึงคนอื่น ๆ ภายในเครือข่ายส่วนตัวเกี่ยวกับ IP-stack และตำแหน่ง ฉันต้องการสร้าง Kubernetes บนเครือข่าย wireguard นี้

ฉันสร้างคลัสเตอร์ทดสอบขนาดเล็ก ...

โหนด ip สาธารณะ wireguard ip
vm1 192.168.10.10 10.11.12.10
vm2 192.168.10.11 10.11.12.11
vm3 192.168.10.12 10.11.12.12
...

... ในสนามเด็กเล่นในพื้นที่ของฉันด้วย kubeadm 1.23.5 ตาม docker.io (ค่าเริ่มต้นของเดเบียน):

vm01> kubeadm init --apiserver-advertise-address=10.11.12.10 --pod-network-cidr=10.20.0.0/16
vm01> ใช้ kubectl -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-rbac.yml
vm01> ใช้ kubectl -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
...
โหนดทั้งหมด> kubeadm เข้าร่วม 10.11.12.10:6443 --token ... --discovery-token-ca-cert-hash sha256:...
...
vm01> อัปเกรดหางเสือ -- ติดตั้ง ingress-nginx ingress-nginx --repo https://kubernetes.github.io/ingress-nginx --namespace ingress-nginx --create-namespace

เมื่อฉันมองจาก vm1 ถึง vm2 ผ่าน tcpdump -n โฮสต์ 192.168.10.11ฉันสามารถเห็นเฉพาะทราฟฟิกผ่านแพ็กเก็ต UDP ของ wireguard ละเอียด...

จากนั้นฉันได้กำหนดการปรับใช้อย่างง่าย, บริการ, ClusterIP, Ingress และมันถูกปรับใช้

---
apiVersion: แอป/v1
ประเภท: การปรับใช้
ข้อมูลเมตา:
  ชื่อ: kubernetes-tutorial-deployment
ข้อมูลจำเพาะ:
  แบบจำลอง: 2
  ตัวเลือก:
    ป้ายกำกับการแข่งขัน:
      แอพ: kubernetes-tutorial-deployment
  แม่แบบ:
    ข้อมูลเมตา:
      ป้ายกำกับ:
        แอพ: kubernetes-tutorial-deployment
    ข้อมูลจำเพาะ:
      ตู้คอนเทนเนอร์:
      - ชื่อ: kubernetes-tutorial-application
        รูปภาพ: auth0blog/kubernetes-tutorial
        พอร์ต:
          - ตู้คอนเทนเนอร์พอร์ต: 3000
---
api เวอร์ชัน: v1
ชนิด:บริการ
ข้อมูลเมตา:
  ชื่อ: kubernetes-tutorial-cluster-ip
ข้อมูลจำเพาะ:
  พอร์ต:
  - พอร์ต: 80
    โปรโตคอล: TCP
    พอร์ตเป้าหมาย: 3000
  ตัวเลือก:
    แอพ: kubernetes-tutorial-deployment
  ชนิด: ClusterIP
---
รุ่น api: networking.k8s.io/v1
ชนิด: ทางเข้า
ข้อมูลเมตา:
  ชื่อ: kubernetes-tutorial-ingress
ข้อมูลจำเพาะ:
  ชื่อคลาส ingress: nginx
  กฎ:
  - โฮสต์: test.example.com
    http:
      เส้นทาง:
      - เส้นทาง: /
        pathType: คำนำหน้า
        แบ็กเอนด์:
          บริการ:
            ชื่อ: kubernetes-tutorial-cluster-ip
            ท่า:
              จำนวน: 80

เมื่อฉันตรวจสอบกับเบราว์เซอร์ ฉันได้รับการตอบกลับ แต่...

การตอบสนองช้ามาก (ฉันสามารถยืนยันได้โดยใช้ curl แบบธรรมดา บริการใช้เวลา 10-20 วินาทีในการตอบสนองต่อคำขอเดียว ซึ่งถือว่าช้ามากสำหรับการปรับใช้แบบง่ายๆ

เมื่อฉันดูผ่าน tcpdump ฉันเห็นทราฟฟิกนอกเครือข่าย wireguard ซึ่งแปลกกว่ามาก

18:39:18.341836 IP 192.168.10.11.59120 > 192.168.10.10.59120: UDP ความยาว 128
18:39:18.344382 IP 192.168.10.10.59120 > 192.168.10.11.59120: UDP ความยาว 176
18:39:18.344563 IP 192.168.10.10.59120 > 192.168.10.11.59120: UDP ความยาว 1452
18:39:18.344571 IP 192.168.10.10.59120 > 192.168.10.11.59120: UDP ความยาว 1452
18:39:18.344572 IP 192.168.10.10.59120 > 192.168.10.11.59120: UDP ความยาว 1452
18:39:18.344573 IP 192.168.10.10.59120 > 192.168.10.11.59120: UDP ความยาว 96
18:39:18.344711 IP 192.168.10.11.59120 > 192.168.10.10.59120: UDP ความยาว 96
18:39:18.344711 IP 192.168.10.11.59120 > 192.168.10.10.59120: UDP ความยาว 96
18:39:18.344711 IP 192.168.10.11.59120 > 192.168.10.10.59120: UDP ความยาว 96
18:39:20.566833 IP 192.168.10.11.59120 > 192.168.10.10.59120: UDP ความยาว 128
18:39:20.566833 IP 192.168.10.11.59120 > 192.168.10.10.59120: UDP ความยาว 592
18:39:20.567003 IP 192.168.10.10.59120 > 192.168.10.11.59120: UDP ความยาว 96
18:39:20.570978 IP 192.168.10.10.59120 > 192.168.10.11.59120: UDP ความยาว 128
18:39:20.571309 IP 192.168.10.11.59120 > 192.168.10.10.59120: UDP ความยาว 96
18:39:20.572538 IP 192.168.10.10.59120 > 192.168.10.11.59120: UDP ความยาว 176
18:39:20.572566 IP 192.168.10.10.59120 > 192.168.10.11.59120: UDP ความยาว 592
18:39:20.572764 IP 192.168.10.11.59120 > 192.168.10.10.59120: UDP ความยาว 96
18:39:20.572764 IP 192.168.10.11.59120 > 192.168.10.10.59120: UDP ความยาว 96
18:39:23.540401 ARP, Request who-has 192.168.10.11 บอก 192.168.10.10 ความยาว 28
18:39:23.540646 ARP ตอบกลับ 192.168.10.11 is-at 7a:1d:d9:fc:fa:eb ยาว 28
18:39:23.608703 IP 192.168.10.10.42274 > 192.168.10.11.8472: OTV, แฟล็ก [I] (0x08), โอเวอร์เลย์ 0, อินสแตนซ์ 1
IP 10.20.0.5.55222 > 10.20.4.2.3000: ค่าสถานะ [S], seq 3011291899, ชนะ 64860, ตัวเลือก [mss 1410,sackOK,TS val 2531657982 ecr 0,nop,wscale 7], ความยาว 0
18:39:23.609071 IP 192.168.10.11.59205 > 192.168.10.10.8472: OTV, แฟล็ก [I] (0x08), โอเวอร์เลย์ 0, อินสแตนซ์ 1
IP 10.20.4.2.3000 > 10.20.0.5.55222: ค่าสถานะ [S.], seq 1444377380, ack 3011291900, win 64308, option [mss 1410,sackOK,TS val 2546470618 ecr 2531657982,nop length,wscale 7],
18:39:23.609112 IP 192.168.10.10.42274 > 192.168.10.11.8472: OTV, แฟล็ก [I] (0x08), โอเวอร์เลย์ 0, อินสแตนซ์ 1
IP 10.20.0.5.55222 > 10.20.4.2.3000: ค่าสถานะ [.], ack 1, ชนะ 507, ตัวเลือก [nop,nop,TS val 2531657983 ecr 2546470618], ความยาว 0
18:39:23.609140 IP 192.168.10.10.42274 > 192.168.10.11.8472: OTV, แฟล็ก [I] (0x08), โอเวอร์เลย์ 0, อินสแตนซ์ 1
IP 10.20.0.5.55222 > 10.20.4.2.3000: ค่าสถานะ [P.], seq 1:749, ack 1, ชนะ 507, ตัวเลือก [nop,nop,TS val 2531657983 ecr 2546470618], ความยาว 748
18:39:23.609370 IP 192.168.10.11.59205 > 192.168.10.10.8472: OTV, แฟล็ก [I] (0x08), โอเวอร์เลย์ 0, อินสแตนซ์ 1
IP 10.20.4.2.3000 > 10.20.0.5.55222: ค่าสถานะ [.], ack 749, ชนะ 501, ตัวเลือก [nop,nop,TS val 2546470618 ecr 2531657983], ความยาว 0
18:39:23.610441 IP 192.168.10.11.36593 > 192.168.10.10.8472: OTV, แฟล็ก [I] (0x08), โอเวอร์เลย์ 0, อินสแตนซ์ 1
IP 10.20.4.2.33592 > 10.20.0.2.53: 53349+ A? test.example.com.default.svc.cluster.local (60)
18:39:23.610713 IP 192.168.10.10.58646 > 192.168.10.11.8472: OTV, แฟล็ก [I] (0x08), โอเวอร์เลย์ 0, อินสแตนซ์ 1
IP 10.20.0.2.53 > 10.20.4.2.33592: 53349 NXDomain*- 0/1/0 (153)
18:39:23.611018 IP 192.168.10.11.32846 > 192.168.10.10.8472: OTV, แฟล็ก [I] (0x08), โอเวอร์เลย์ 0, อินสแตนซ์ 1
IP 10.20.4.2.40077 > 10.20.0.2.53: 57710+ A? test.example.com.svc.cluster.local (52)
18:39:23.611134 IP 192.168.10.10.41066 > 192.168.10.11.8472: OTV, แฟล็ก [I] (0x08), โอเวอร์เลย์ 0, อินสแตนซ์ 1
IP 10.20.0.2.53 > 10.20.4.2.40077: 57710 NXDomain*- 0/1/0 (145)
18:39:23.611427 IP 192.168.10.11.51546 > 192.168.10.10.8472: OTV, แฟล็ก [I] (0x08), โอเวอร์เลย์ 0, อินสแตนซ์ 1
IP 10.20.4.2.59046 > 10.20.0.3.53: 18849+ A? test.example.com.cluster.local (48)
18:39:23.611567 IP 192.168.10.10.39789 > 192.168.10.11.8472: OTV, แฟล็ก [I] (0x08), โอเวอร์เลย์ 0, อินสแตนซ์ 1
IP 10.20.0.3.53 > 10.20.4.2.59046: 18849 NXDomain*- 0/1/0 (141)
18:39:23.611831 IP 192.168.10.11.50067 > 192.168.10.10.8472: OTV, แฟล็ก [I] (0x08), โอเวอร์เลย์ 0, อินสแตนซ์ 1
IP 10.20.4.2.34442 > 10.20.0.3.53: 49768+ A? test.example.com.sol.system (45)
18:39:25.329861 IP 192.168.10.10.59120 > 192.168.10.11.59120: UDP ความยาว 208
18:39:25.330138 IP 192.168.10.11.59120 > 192.168.10.10.59120: UDP ความยาว 96
18:39:25.613106 IP 192.168.10.10.52981 > 192.168.10.11.8472: OTV, แฟล็ก [I] (0x08), โอเวอร์เลย์ 0, อินสแตนซ์ 1
IP 10.20.0.3.53 > 10.20.4.2.34442: 49768 ServFail- 0/0/0 (45)
18:39:25.613542 IP 192.168.10.11.33388 > 192.168.10.10.8472: OTV, แฟล็ก [I] (0x08), โอเวอร์เลย์ 0, อินสแตนซ์ 1
IP 10.20.4.2.59146 > 10.20.0.3.53: 49768+ A? test.example.com.sol.system (45)
18:39:27.021478 IP 192.168.10.10.59120 > 192.168.10.11.59120: UDP ความยาว 224
18:39:27.021876 IP 192.168.10.11.59120 > 192.168.10.10.59120: UDP ความยาว 96
18:39:27.614533 IP 192.168.10.10.48157 > 192.168.10.11.8472: OTV, แฟล็ก [I] (0x08), โอเวอร์เลย์ 0, อินสแตนซ์ 1
IP 10.20.0.3.53 > 10.20.4.2.59146: 49768 ServFail- 0/0/0 (45)
18:39:27.614906 IP 192.168.10.11.52721 > 192.168.10.10.8472: OTV, แฟล็ก [I] (0x08), โอเวอร์เลย์ 0, อินสแตนซ์ 1
IP 10.20.4.2.33596 > 10.20.0.3.53: 32196+ A? ทดสอบ.example.com. (34)
18:39:28.500696 IP 192.168.10.11.59120 > 192.168.10.10.59120: UDP ความยาว 128
18:39:28.503146 ​​IP 192.168.10.10.59120 > 192.168.10.11.59120: UDP ความยาว 256
18:39:28.503158 IP 192.168.10.10.59120 > 192.168.10.11.59120: UDP ความยาว 1452
18:39:28.503159 IP 192.168.10.10.59120 > 192.168.10.11.59120: UDP ความยาว 1452
18:39:28.503161 IP 192.168.10.10.59120 > 192.168.10.11.59120: UDP ความยาว 1452
18:39:28.503162 IP 192.168.10.10.59120 > 192.168.10.11.59120: UDP ความยาว 96
18:39:28.503453 IP 192.168.10.11.59120 > 192.168.10.10.59120: UDP ความยาว 96
18:39:28.503453 IP 192.168.10.11.59120 > 192.168.10.10.59120: UDP ความยาว 96
18:39:28.503453 IP 192.168.10.11.59120 > 192.168.10.10.59120: UDP ความยาว 96
18:39:28.503453 IP 192.168.10.11.59120 > 192.168.10.10.59120: UDP ความยาว 96
18:39:28.503453 IP 192.168.10.11.59120 > 192.168.10.10.59120: UDP ความยาว 96
18:39:28.627012 IP 192.168.10.11.59120 > 192.168.10.10.59120: UDP ความยาว 128
18:39:28.627292 IP 192.168.10.10.59120 > 192.168.10.11.59120: UDP ความยาว 128
18:39:28.627636 IP 192.168.10.11.59120 > 192.168.10.10.59120: UDP ความยาว 96
18:39:29.615282 IP 192.168.10.10.52590 > 192.168.10.11.8472: OTV, แฟล็ก [I] (0x08), โอเวอร์เลย์ 0, อินสแตนซ์ 1
IP 10.20.0.3.53 > 10.20.4.2.33596: 32196 ServFail- 0/0/0 (34)
18:39:29.615672 IP 192.168.10.11.37175 > 192.168.10.10.8472: OTV, แฟล็ก [I] (0x08), โอเวอร์เลย์ 0, อินสแตนซ์ 1
IP 10.20.4.2.50957 > 10.20.0.3.53: 32196+ A? ทดสอบ.example.com. (34)
18:39:29.877400 IP 192.168.10.10.59120 > 192.168.10.11.59120: UDP ความยาว 192
18:39:29.877722 IP 192.168.10.11.59120 > 192.168.10.10.59120: UDP ความยาว 96
18:39:30.898243 IP 192.168.10.11.59120 > 192.168.10.10.59120: UDP ความยาว 128
18:39:30.898243 IP 192.168.10.11.59120 > 192.168.10.10.59120: UDP ความยาว 592
18:39:30.898330 IP 192.168.10.10.59120 > 192.168.10.11.59120: UDP ความยาว 96
18:39:30.902126 IP 192.168.10.10.59120 > 192.168.10.11.59120: UDP ความยาว 128
18:39:30.902362 IP 192.168.10.11.59120 > 192.168.10.10.59120: UDP ความยาว 96
18:39:30.903556 IP 192.168.10.10.59120 > 192.168.10.11.59120: UDP ความยาว 176
18:39:30.903696 IP 192.168.10.10.59120 > 192.168.10.11.59120: UDP ความยาว 592
18:39:30.904023 IP 192.168.10.11.59120 > 192.168.10.10.59120: UDP ความยาว 96
18:39:30.904023 IP 192.168.10.11.59120 > 192.168.10.10.59120: UDP ความยาว 96
18:39:31.617136 IP 192.168.10.10.38253 > 192.168.10.11.8472: OTV, แฟล็ก [I] (0x08), โอเวอร์เลย์ 0, อินสแตนซ์ 1
IP 10.20.0.3.53 > 10.20.4.2.50957: 32196 ServFail- 0/0/0 (34)
18:39:31.619778 IP 192.168.10.11.59205 > 192.168.10.10.8472: OTV, แฟล็ก [I] (0x08), โอเวอร์เลย์ 0, อินสแตนซ์ 1
IP 10.20.4.2.3000 > 10.20.0.5.55222: ค่าสถานะ [P.], seq 1:114, ack 749, win 501, options [nop,nop,TS val 2546478629 ecr 2531657983], ความยาว 113
18:39:31.619911 IP 192.168.10.10.42274 > 192.168.10.11.8472: OTV, แฟล็ก [I] (0x08), โอเวอร์เลย์ 0, อินสแตนซ์ 1
IP 10.20.0.5.55222 > 10.20.4.2.3000: ค่าสถานะ [.], ack 114, ชนะ 507, ตัวเลือก [nop,nop,TS val 2531665993 ecr 2546478629], ความยาว 0
18:39:33.434382 IP 192.168.10.11.59120 > 192.168.10.10.59120: UDP ความยาว 128
18:39:33.434488 IP 192.168.10.10.59120 > 192.168.10.11.59120: UDP ความยาว 96
18:39:33.434537 IP 192.168.10.10.59120 > 192.168.10.11.59120: UDP ความยาว 128
18:39:33.434860 ​​IP 192.168.10.11.59120 > 192.168.10.10.59120: UDP ความยาว 96

สาเหตุที่เป็นไปได้คืออะไร เหตุใดการตอบสนองจึงช้ามากในเครือข่าย LANเป็นเพราะการกำหนดเส้นทางผิดไปยัง IP "สาธารณะ" แทนที่จะใช้ wireguard IP หรือไม่ เป็นไปได้ไหมที่จะกำหนดค่า Kubernetes ให้ใช้ที่อยู่ wireguard สำหรับพอร์ต 8472

Score:0
ธง us
TRW

ตกลง ฉันพบวิธีแก้ปัญหาแล้ว

  1. ฉันได้ทดสอบการติดตั้งคลัสเตอร์โดยไม่มี Wireguard และในกรณีที่สมัคร auth0blog/kubernetes-กวดวิชา ยังค้างหลายวินาที ดังนั้นฉันจึงเปลี่ยนไปใช้บริการ nginx http แบบธรรมดาและตอบกลับในเวลาที่คาดไว้
  2. พอร์ต 8472 ถูกใช้โดยสักหลาด มีปัญหาใน Github (ตั้งแต่ปี 2018...) แสดงว่าใช้อินเทอร์เฟซเครือข่ายภายนอกตามค่าเริ่มต้น ต้องกำหนดค่าให้ใช้อินเตอร์เฟส wireguard ดู https://github.com/rancher/rancher/issues/15133 และ https://github.com/rancher/rancher/issues/14721#issuecomment-417913067

ดังนั้น - อันที่จริงนี่เป็นสิ่งที่ซ้ำกันไม่มากก็น้อย https://stackoverflow.com/questions/66449289/is-there-any-way-to-bind-k3s-flannel-to-another-interface

และเนื่องจากฉันยังใหม่กับ Kubernetes ฉันจึงสงสัยว่าจะเปลี่ยนค่านั้นในคำสั่งที่กำหนดได้อย่างไร (ดูคำถาม)เอกสารอธิบายเฉพาะเกี่ยวกับพารามิเตอร์ แต่ไม่ได้บอกว่าจะตั้งค่าได้อย่างไรและที่ไหน ฉันมองไปรอบ ๆ และพบว่า https://stackoverflow.com/questions/47845739/configuring-flannel-to-use-a-non-default-interface-in-kubernetes

คุณจะเห็นว่าวิธีแก้ปัญหาคือการดาวน์โหลด flannel.yml และเพิ่มพารามิเตอร์ --iface=wg_k8s ไปยังไฟล์นั้นในตำแหน่งที่ถูกต้อง ในเวอร์ชันปัจจุบัน (2022) จะอยู่ในบรรทัดที่ 200+

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา