Score:0

นโยบายเครือข่าย Kubernetes จะไม่ได้รับการบังคับใช้ เว้นแต่จะรีสตาร์ทชุดปลั๊กอินปลั๊กอินเครือข่าย ทำไม

ธง br

ฉันมีนโยบายเครือข่ายเพียงนโยบายเดียวในคลัสเตอร์ของฉันใน prod namespace ที่อนุญาตเฉพาะกฎขาเข้า ปลั๊กอินเครือข่ายเป็นแบบสานตาข่าย ไม่มีการกำหนดค่ากฎสำหรับขาออก ดังนั้นฉันคาดว่าการรับส่งข้อมูลขาออกจะถูกบล็อก แต่จนกว่าฉันจะรีสตาร์ท network daemon-set pods กฎจะไม่มีผล ฉันทราบจากแนวทางปฏิบัติที่ดีที่สุด ฉันควรมีกฎการเข้าและออกเริ่มต้น แต่ฉันต้องการเข้าใจเหตุผลของพฤติกรรมนี้ ขั้นตอนนี้จำเป็นเสมอเพื่อรีสตาร์ทพ็อดปลั๊กอินเครือข่ายหรือไม่

1. คำจำกัดความของนโยบายเครือข่าย

รุ่น api: networking.k8s.io/v1
ชนิด: NetworkPolicy
ข้อมูลเมตา:
  ชื่อ: ทดสอบเครือข่ายนโยบาย
  เนมสเปซ: ผลิตภัณฑ์
ข้อมูลจำเพาะ:
  ทางเข้า:
  - {}
  ตัวเลือกพ็อด:
    ป้ายกำกับการแข่งขัน:
      เรียกใช้: prod-nginx
  ประเภทนโยบาย:
  - ขาเข้า
  - ขาออก

2. ตรวจสอบวัตถุ netpol

ชื่อ: ทดสอบเครือข่ายนโยบาย
เนมสเปซ: ผลิตภัณฑ์
สร้างเมื่อ: 2021-06-06 10:16:50 +0000 UTC
ป้ายกำกับ: <ไม่มี>
คำอธิบายประกอบ: <ไม่มี>
ข้อมูลจำเพาะ:
  PodSelector: run=prod-nginx
  อนุญาตการรับส่งข้อมูลขาเข้า:
    ไปยังท่าเรือ: <any> (อนุญาตการจราจรไปยังทุกท่าเรือ)
    จาก: <any> (ทราฟฟิกไม่ถูกจำกัดโดยแหล่งที่มา)
  อนุญาตการรับส่งข้อมูลขาออก:
    <ไม่มี> (พ็อดที่เลือกแยกไว้สำหรับการเชื่อมต่อขาออก)
  ประเภทนโยบาย: ทางเข้าออก

3. การทดสอบทราฟฟิกขาออกไปยังเซิร์ฟเวอร์ nginx (สิ่งนี้เป็นสิ่งที่ไม่คาดคิดสำหรับความเข้าใจของฉัน)

บันทึก: 10.39.0.5 เป็น IP ของเซิร์ฟเวอร์ nginx ที่ทำงานในเนมสเปซ 'ทดสอบ'

คำสั่ง : kubectl -n prod exec -it prod-nginx -- curl http://10.39.0.5 | grep #egress สำเร็จ
การตอบสนอง: <p>หากคุณเห็นหน้านี้ แสดงว่าติดตั้งเว็บเซิร์ฟเวอร์ nginx สำเร็จและ

4. รีสตาร์ทฝักตาข่ายสาน

5. ทดสอบการเชื่อมต่อขาออกอีกครั้งกับเซิร์ฟเวอร์ nginx เดียวกัน (คาดว่า)

บันทึก: 10.39.0.5 เป็น IP ของเซิร์ฟเวอร์ nginx ที่ทำงานในเนมสเปซ 'ทดสอบ'

คำสั่ง: kubectl -n prod exec -it prod-nginx -- curl http://10.39.0.5 | grep สำเร็จ #egress**
การตอบสนอง: ไม่มีการเชื่อมต่อ
matt_j avatar
in flag
ไม่จำเป็นต้องรีสตาร์ท `weave-net` Pods Pod ใดมีที่อยู่ IP `10.39.0.5` คุณช่วยอธิบายได้ไหม
Rajesh Dutta avatar
br flag
IP 10.39.0.5 เป็นของเซิร์ฟเวอร์ nginx ซึ่งทำงานในเนมสเปซอื่น ('ทดสอบ')
Rajesh Dutta avatar
br flag
ฉันขอโทษที่ไม่ได้กล่าวถึงเรื่องนี้ ฉันได้อัปเดตคำถามโดยเพิ่มหมายเหตุเกี่ยวกับ IP ขอบคุณสำหรับความพยายามของคุณ
Score:0
ธง in

ฉันต้องการแสดงให้คุณเห็นว่าการรีสตาร์ท ตาข่ายสาน ไม่จำเป็นต้องใช้พ็อด นโยบายเครือข่าย เพื่อให้มีผล

ของคุณ ทดสอบเครือข่ายนโยบาย นโยบายเครือข่าย ใช้กับ Pods ที่มีป้ายกำกับ run=prod-nginx ใน แยง เนมสเปซและอนุญาตการรับส่งข้อมูลขาเข้าทั้งหมดและปฏิเสธการรับส่งข้อมูลขาออกทั้งหมด

ฉันจะสร้างตัวอย่างเพื่ออธิบายวิธีการทำงาน


ก่อนอื่นฉันสร้างไฟล์ ผลิตภัณฑ์ nginx & การทดสอบผลิตภัณฑ์ พ็อดและทดสอบการเชื่อมต่อด้วยหมายเลข นโยบายเครือข่าย ปรับใช้:

# kubectl รัน prod-nginx --image=nginx -n prod
สร้าง pod/prod-nginx แล้ว

# kubectl รัน prod-test --image=nginx -n prod
สร้างการทดสอบพ็อด/ผลิตภัณฑ์แล้ว
    
# kubectl รับพ็อด -o กว้าง -n ผลิตภัณฑ์
สถานะพร้อมชื่อ รีสตาร์ทอายุ ป้ายชื่อ IP
prod-nginx 1/1 ทำงาน 0 37s 10.44.0.1 run=prod-nginx
ทดสอบผลิตภัณฑ์ 1/1 ทำงาน 0 11 วินาที 10.44.0.2 เรียกใช้ = ทดสอบผลิตภัณฑ์

# kubectl exec -it prod-nginx -n prod -- curl 10.44.0.1 | grep - ฉันประสบความสำเร็จ
<p>หากคุณเห็นหน้านี้ แสดงว่าติดตั้งเว็บเซิร์ฟเวอร์ nginx สำเร็จและ

# kubectl exec -it prod-nginx -n prod -- curl 10.44.0.2 | grep - ฉันประสบความสำเร็จ
<p>หากคุณเห็นหน้านี้ แสดงว่าติดตั้งเว็บเซิร์ฟเวอร์ nginx สำเร็จและ

ทุกอย่างทำงานได้ดี ดังนั้นเรามาปรับใช้ ทดสอบเครือข่ายนโยบาย นโยบายเครือข่าย และทดสอบอีกครั้ง:

#แมวnetpol.yml 
รุ่น api: networking.k8s.io/v1
ชนิด: NetworkPolicy
ข้อมูลเมตา:
  ชื่อ: ทดสอบเครือข่ายนโยบาย
  เนมสเปซ: ผลิตภัณฑ์
ข้อมูลจำเพาะ:
  ทางเข้า:
  - {}
  ตัวเลือกพ็อด:
    ป้ายกำกับการแข่งขัน:
      เรียกใช้: prod-nginx
  ประเภทนโยบาย:
  - ขาเข้า
  - ขาออก
  
# kubectl ใช้ -f netpol.yml 
สร้าง networkpolicy.networking.k8s.io/test-network-policy แล้ว

เราจะเห็นได้ว่า ผลิตภัณฑ์ nginx พ็อดไม่สามารถเชื่อมต่อกับพ็อดอื่นๆ ได้ แต่เชื่อมต่อกับตัวเองได้:
บันทึก: พ็อดไม่สามารถปิดกั้นการเข้าถึงตัวเองได้ (ดู: นโยบายเครือข่าย เอกสาร)

# kubectl exec -it prod-nginx -n prod -- curl 10.44.0.1 | grep - ฉันประสบความสำเร็จ
<p>หากคุณเห็นหน้านี้ แสดงว่าติดตั้งเว็บเซิร์ฟเวอร์ nginx สำเร็จและ
   
# kubectl exec -it prod-nginx -n prod -- curl 10.44.0.2 | grep - ฉันประสบความสำเร็จ
คำสั่งสิ้นสุดด้วยรหัสทางออก 7

ตอนนี้เรามาสร้าง เวที nginx พ็อดใน เวที เนมสเปซและตรวจสอบว่าไฟล์ ผลิตภัณฑ์ nginx Pod สามารถเชื่อมต่อกับมัน:

# kubectl เรียกใช้ stage-nginx --image=nginx -n เวที
สร้าง pod/stage-nginx แล้ว

# kubectl รับ pod -o กว้าง -n เวที
ชื่อ พร้อม สถานะ เริ่มอายุ IP ใหม่          
stage-nginx 1/1 ทำงาน 0 20s 10.44.0.6   

# kubectl exec -it prod-nginx -n prod -- curl 10.44.0.6 | grep - ฉันประสบความสำเร็จ
คำสั่งสิ้นสุดด้วยรหัสทางออก 7

เราได้ตรวจสอบแล้วว่ากฎขาออกทำงานได้อย่างถูกต้องและเริ่มต้นระบบใหม่ ตาข่ายสาน ไม่จำเป็นต้องใช้พ็อด

Rajesh Dutta avatar
br flag
ขอบคุณสำหรับความพยายาม ฉันได้อัปเดตคำถามด้วยหมายเหตุเกี่ยวกับ IP
Rajesh Dutta avatar
br flag
ขอบคุณสำหรับความพยายาม ฉันได้อัปเดตคำถามด้วยหมายเหตุเกี่ยวกับ IP ตอนนี้เกี่ยวกับปัญหา โปรดลองเชื่อมต่อเซิร์ฟเวอร์ที่ทำงานในเนมสเปซอื่น ในกรณีของฉันฉันยังคงเห็นปัญหาอยู่ คุณสามารถลองเปิดใช้งานและปิดใช้งานขาออกได้หลายครั้ง และดูว่าแต่ละครั้งที่นโยบายเครือข่ายทำงานตามที่คาดไว้หรือไม่โดยไม่ต้องรีสตาร์ทเซิร์ฟเวอร์ weave-net จริงๆ แล้วปัญหาก็มีอยู่ใน Ingress เช่นกัน แต่ฉันเลือกที่จะอธิบายด้วยขาออก และจนถึงตอนนี้ที่ฉันสังเกตเห็น สิ่งนี้จะเกิดขึ้นก็ต่อเมื่อคุณระบุประเภทนโยบาย (ขาออกในกรณีการใช้งานของเรา) โดยไม่มีกฎ

โพสต์คำตอบ

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