Score:1

หมดเวลาบน Cloud SQL และบริการภายนอกอื่นๆ เมื่อใช้ NAT + IP Masquerade บน GKE

ธง it

ฉันต้องกำหนดค่า IP แบบคงที่ใน POD อันใดอันหนึ่งของฉัน เนื่องจากบริการระยะไกล (นอกคลัสเตอร์ของฉัน) ต้องการรายการ IP ที่อนุญาตพิเศษที่เชื่อถือได้

ฉันทำตามเอกสารที่จัดทำโดย Google:

https://cloud.google.com/nat/docs/overview?hl=es-419

https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent

แต่เมื่อพยายามกำหนดค่าการรับส่งข้อมูลขาออกโดยใช้บริการ Google cloud NAT ในคลัสเตอร์ GKE ของฉัน รวมถึงการปลอมแปลงโดยใช้ ip-masq-ตัวแทน ฉันเริ่มหมดเวลาและมีปัญหาเมื่อเข้าถึงบริการระยะไกลนอกคลัสเตอร์

My Cluster อยู่ในเวอร์ชัน 1.19.10-gke.1600.

ฉันได้ลองไฟล์ปรับแต่งเหล่านี้ด้วยผลลัพธ์ต่อไปนี้:

resyncInterval: 60 วินาที

ผลลัพธ์:

เชน IP-MASQ (2 ข้อมูลอ้างอิง)
เป้าหมาย prot เลือกปลายทางต้นทาง         
คืนทั้งหมด -- ทุกที่ 10.0.0.0/8 /* ip-masq-agent: ทราฟฟิกในเครื่องไม่ใช่ย่อย
ปฏิเสธที่จะ MASQUERADE */
ส่งคืนทั้งหมด -- ทุกที่ 172.16.0.0/12 /* ip-masq-agent: การรับส่งข้อมูลในเครื่องนั้นไม่ย่อย
ปฏิเสธที่จะ MASQUERADE */
คืนทั้งหมด -- ทุกที่ 192.168.0.0/16 /* ip-masq-agent: การรับส่งข้อมูลในเครื่องนั้นไม่ใช่ย่อย
ปฏิเสธที่จะ MASQUERADE */
MASQUERADE ทั้งหมด -- ทุกที่ ทุกแห่ง /* ip-masq-agent: ทราฟฟิกขาออกนั้นย่อย
ject to MASQUERADE (ต้องอยู่ในกลุ่มสุดท้าย) */

บริการใช้ IP ที่ไม่ถูกต้อง


resyncInterval: 60 วินาที
masqLinkLocal: จริง

เชน IP-MASQ (2 ข้อมูลอ้างอิง)
เป้าหมาย prot เลือกปลายทางต้นทาง         
ส่งคืนทั้งหมด -- ทุกที่ 169.254.0.0/16 /* ip-masq-agent: การรับส่งข้อมูลในเครื่องนั้นไม่ใช่ย่อย
ปฏิเสธที่จะ MASQUERADE */
คืนทั้งหมด -- ทุกที่ 10.0.0.0/8 /* ip-masq-agent: ทราฟฟิกในเครื่องไม่ใช่ย่อย
ปฏิเสธที่จะ MASQUERADE */
ส่งคืนทั้งหมด -- ทุกที่ 172.16.0.0/12 /* ip-masq-agent: การรับส่งข้อมูลในเครื่องนั้นไม่ย่อย
ปฏิเสธที่จะ MASQUERADE */
คืนทั้งหมด -- ทุกที่ 192.168.0.0/16 /* ip-masq-agent: การรับส่งข้อมูลในเครื่องนั้นไม่ใช่ย่อย
ปฏิเสธที่จะ MASQUERADE */
MASQUERADE ทั้งหมด -- ทุกที่ ทุกแห่ง /* ip-masq-agent: ทราฟฟิกขาออกนั้นย่อย
ject to MASQUERADE (ต้องอยู่ในห่วงโซ่สุดท้าย) */

ผลเช่นเดียวกัน บริการภายนอกของฉันได้รับ IP ที่ไม่ถูกต้อง


nonMasqueradeCIDRs:
  - 0.0.0.0/0
resyncInterval: 60 วินาที
masqLinkLocal: จริง

เชน IP-MASQ (2 ข้อมูลอ้างอิง)
เป้าหมาย prot เลือกปลายทางต้นทาง         
ส่งคืนทั้งหมด -- ทุกที่ ทุกแห่ง /* ip-masq-agent: ทราฟฟิกในเครื่องไม่ใช่ย่อย
ปฏิเสธที่จะ MASQUERADE */
MASQUERADE ทั้งหมด -- ทุกที่ ทุกแห่ง /* ip-masq-agent: ทราฟฟิกขาออกนั้นย่อย
ject to MASQUERADE (ต้องอยู่ในห่วงโซ่สุดท้าย) */

ดูเหมือนว่าจะทำงานได้ดีขึ้นเนื่องจากบริการภายนอกได้รับ IP ที่ถูกต้อง แต่ฉันพบปัญหาการเชื่อมต่อและการหมดเวลา


นี่คือการกำหนดค่า NAT ของฉัน:

การทำแผนที่ NAT
- ความพร้อมใช้งานสูง: ใช่
- ซับเน็ตต้นทางและช่วง IP: ช่วง IP หลักและรองของซับเน็ตทั้งหมด
- ที่อยู่ IP ของ NAT: static-egress-ip XXX.XXX.XXX.XXX

ฉันคิดไม่ออก ใครสามารถให้คำแนะนำกับฉันได้บ้าง


หลังจากได้รับคำตอบแล้ว ฉันอัปเดตไฟล์ปรับแต่งเพื่อเพิ่ม ips ตามเอกสารประกอบของ Google Cloud ไฟล์จะเป็นดังนี้:

nonMasqueradeCIDRs:
  - 10.0.0.0/8
  - 172.16.0.0/12
  - 192.168.0.0/16
  - 100.64.0.0/10
  - 192.0.0.0/24
  - 192.0.2.0/24
  - 192.88.99.0/24
  - 198.18.0.0/15
  - 198.51.100.0/24
  - 203.0.113.0/24
  - 240.0.0.0/4
resyncInterval: 60 วินาที
masqLinkLocal: จริง

ผลลัพธ์ของสิ่งนี้ใน iptables คือ:

เชน IP-MASQ (2 ข้อมูลอ้างอิง)
เป้าหมาย prot เลือกปลายทางต้นทาง         
คืนทั้งหมด -- ทุกที่ 10.0.0.0/8 /* ip-masq-agent: ทราฟฟิกในเครื่องไม่ใช่ย่อย
ปฏิเสธที่จะ MASQUERADE */
ส่งคืนทั้งหมด -- ทุกที่ 172.16.0.0/12 /* ip-masq-agent: การรับส่งข้อมูลในเครื่องนั้นไม่ย่อย
ปฏิเสธที่จะ MASQUERADE */
คืนทั้งหมด -- ทุกที่ 192.168.0.0/16 /* ip-masq-agent: การรับส่งข้อมูลในเครื่องนั้นไม่ใช่ย่อย
ปฏิเสธที่จะ MASQUERADE */
ส่งคืนทั้งหมด -- ทุกที่ 100.64.0.0/10 /* ip-masq-agent: การรับส่งข้อมูลในเครื่องไม่ใช่ย่อย
ปฏิเสธที่จะ MASQUERADE */
ส่งคืนทั้งหมด -- ทุกที่ 192.0.0.0/24 /* ip-masq-agent: การรับส่งข้อมูลในเครื่องนั้นไม่ย่อย
ปฏิเสธที่จะ MASQUERADE */
คืนทั้งหมด -- ทุกที่ 192.0.2.0/24 /* ip-masq-agent: การรับส่งข้อมูลในเครื่องนั้นไม่ย่อย
ปฏิเสธที่จะ MASQUERADE */
คืนทั้งหมด -- ทุกที่ 192.88.99.0/24 /* ip-masq-agent: การรับส่งข้อมูลในเครื่องนั้นไม่ใช่ย่อย
ปฏิเสธที่จะ MASQUERADE */
คืนทั้งหมด -- ทุกที่ 198.18.0.0/15 /* ip-masq-agent: การรับส่งข้อมูลในเครื่องนั้นไม่ใช่ย่อย
ปฏิเสธที่จะ MASQUERADE */
คืนทั้งหมด -- ทุกที่ 198.51.100.0/24 /* ip-masq-agent: การรับส่งข้อมูลในเครื่องนั้นไม่ย่อย
ปฏิเสธที่จะ MASQUERADE */
คืนทั้งหมด -- ทุกที่ 203.0.113.0/24 /* ip-masq-agent: การรับส่งข้อมูลในเครื่องนั้นไม่ย่อย
ปฏิเสธที่จะ MASQUERADE */
ส่งคืนทั้งหมด -- ทุกที่ 240.0.0.0/4 /* ip-masq-agent: การรับส่งข้อมูลในเครื่องนั้นไม่ใช่ย่อย
ปฏิเสธที่จะ MASQUERADE */
MASQUERADE ทั้งหมด -- ทุกที่ ทุกแห่ง /* ip-masq-agent: ทราฟฟิกขาออกนั้นย่อย
ject to MASQUERADE (ต้องอยู่ในกลุ่มสุดท้าย) */

แต่ถ้าผมม้วนผม checkip.amazonaws.com เพื่อดูว่าโหนดกำลังใช้ IP ใดอยู่ ฉันได้รับ IP ที่แตกต่างจากที่กำหนดไว้ในการกำหนดค่า NAT Cloud ของฉัน และบริการภายนอกปฏิเสธคำขอที่ไม่น่าเชื่อถือจากคลัสเตอร์ของฉัน

Score:1
ธง gh

ดูเหมือนว่าคุณได้ตั้งค่า nonMasqueradeCIDRs: เป็น 0.0.0.0/0 ดังนั้นจึงป้องกันการปลอมแปลงการรับส่งข้อมูล CIDR ทั้งหมด ดังนั้นเพื่อแก้ไขปัญหานี้ ในไฟล์ปรับแต่งให้อัปเดตคีย์

nonMasqueradeCIDRs:

  • 172.16.0.0/12
  • 192.168.0.0/16
  • 100.64.0.0/10
  • 192.0.0.0/24
  • 192.0.2.0/24
  • 192.88.99.0/24
  • 198.18.0.0/15
  • 198.51.100.0/24
  • 203.0.113.0/24
  • 240.0.0.0/4
  • 10.0.0.0/8

นอกจากนี้ โปรดทราบว่า IP ที่อ้างถึงในภาพหน้าจอไม่ใช่ IP ที่ผิด แต่เป็นช่วงที่สงวนไว้โดย RFC 1918/link-local เช่น IP 10.0.0.0/8, 172.16.0.0/12 192.168.0.0/16 ถูกสงวนไว้สำหรับ RFC 1918 และช่วง IP 169.254.0.0/16 ถูกสงวนไว้สำหรับ link-local และสิ่งเหล่านี้ไม่สามารถปลอมแปลงได้ ดังนั้น IP เหล่านี้จึงแสดงพร้อมกับคำอธิบายว่า “ip-masq-agent: local traffic is not subject to masqueradeâ” [2].

[1] https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent#default-non-masq-dests

[2] https://kubernetes.io/docs/tasks/administer-cluster/ip-masq-agent/#ip-masquerade-agent-user-guide

ความนับถือ, อันบุ.

it flag
สวัสดี @Anbu ขอบคุณมากสำหรับความช่วยเหลือ ฉันทำตามคำแนะนำของคุณและแทนที่จะใช้ 0.0.0.0/0 เป็น masq ฉันใส่ช่วงที่กำหนดไว้ในเอกสารประกอบ คุณสามารถดูรุ่นที่สร้างขึ้นสำหรับคำถามของฉันเพื่อดูผลลัพธ์ของคำสั่ง แต่ฉันยังคงมีปัญหาที่โหนดและพ็อดของฉันกำลังเรียกใช้บริการภายนอกโดยใช้ IP ที่ฉันไม่ได้ควบคุม IP คงที่ NAT ที่ฉันกำหนดค่าใน GOOGLE CLOUD NAT จะถูกละเว้น ฉันกำลังทดสอบสิ่งนี้ด้วย curl โดยตรงจากโหนด ssh หรือเรียกบริการภายนอกของฉันซึ่งส่งคืน IP ที่ไม่ได้รับอนุญาต ความคิดใด ๆ ?
Score:0
ธง it

ในที่สุดเราก็สามารถวินิจฉัยปัญหาได้ คลัสเตอร์ของเราถูกสร้างขึ้นเมื่อ GCP ไม่รองรับคลัสเตอร์ส่วนตัว ดังนั้นคลัสเตอร์ของเราจึงเป็นแบบสาธารณะ

แต่ละโหนดมี IP ชั่วคราวสาธารณะ ดังนั้นกฎ NAT จึงถูกละเว้น

โซลูชันคือการตั้งค่าโหนดด้วย IP แบบคงที่และไม่ใช่ชั่วคราว และการกำหนดค่าปริมาณงานที่ต้องใช้การรับรองความถูกต้องที่เชื่อถือได้เพื่อปรับใช้บนโหนดเฉพาะนั้นเสมอ นี่ไม่ใช่วิธีแก้ปัญหาที่สมบูรณ์แบบ แต่เป็นสิ่งที่เราสามารถทำได้อย่างรวดเร็วเพื่อแก้ปัญหา

วิธีแก้ปัญหาที่แท้จริงคือการโยกย้ายไปยังคลัสเตอร์ส่วนตัวและกำหนดค่า NAT แต่น่าเศร้าที่ GCP ไม่รองรับการย้ายจากคลัสเตอร์สาธารณะไปยังคลัสเตอร์ส่วนตัว ตัวเลือกเดียวคือการสร้างคลัสเตอร์ใหม่และย้ายปริมาณงานไปยังคลัสเตอร์ใหม่ ซึ่งเป็นกระบวนการที่เราจะต้องดำเนินการในระยะสั้น

อาจเป็นเวลาที่ดีที่จะทดสอบระบบขับเคลื่อนอัตโนมัติซึ่งไม่รองรับการย้ายข้อมูลอัตโนมัติเช่นกัน

โพสต์คำตอบ

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