วิธีการเลือกที่อยู่ IP ภายนอกของเครื่องมือสร้างสมดุล Kubernetes ใน Google Kubernetes Engine


16

ฉันปรับใช้เว็บแอปโดยใช้ Google Kubernetes Engine และฉันต้องการให้สามารถเข้าถึงได้ผ่าน load balancer บนที่อยู่ IP แบบคงที่ที่ฉันควบคุมเป็นส่วนหนึ่งของโครงการเดียวกันในแพลตฟอร์ม Google Cloud เพราะชื่อโดเมนที่ฉันต้องการใช้ ชี้ไปที่ IP นี้แล้ว

ไฟล์ yaml ที่ฉันใช้สำหรับพ็อดคือ:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  labels:
    app: my-app
spec:
  containers:
  - name: my-container
    image: gcr.io/my-project/my-app:latest

ฉันสามารถตั้งค่าตัวโหลดบาลานซ์ได้โดยใช้:

apiVersion: v1
kind: Service
metadata:
  name: my-load-balancer
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: my-app
  type: LoadBalancer

นี่เป็น IP ภายนอกที่แอพเข้าถึงได้ แต่ฉันไม่สามารถหาวิธีกำหนดค่าให้ใช้ IP ที่ฉันต้องการได้ เอกสารบริการกล่าวถึงการตั้งค่า spec.clusterIP แต่ตอนนี้ดูเหมือนจะไม่เกี่ยวข้องกับ IP ภายนอก เช่นเดียวกันเมื่อโหลดบาลานเซอร์ติดตั้งแล้วฟิลด์สถานะของบริการ. loadBalancer.ingress.ip จะถูกตั้งค่าเป็นที่อยู่ IP ภายนอก แต่ดูเหมือนจะเป็นการตั้งค่าที่ไม่สามารถกำหนดค่าได้

เป็นอีกทางเลือกหนึ่งฉันพยายามสร้างกฎการส่งต่อด้วยตนเองในคอนโซล Google Compute Engine เพื่อควบคุมการรับส่งข้อมูลจากที่อยู่ IP แบบคงที่ของฉันไปยังกลุ่มเป้าหมายที่ตั้งค่าโดย Kubernetes แต่เมื่อฉันพยายามเชื่อมต่อการเชื่อมต่อถูกปฏิเสธ

มีวิธีการทำสิ่งที่ฉันต้องการ - เพื่อเปิดเผยฝัก Kubernetes (หรือตัวควบคุมการจำลองแบบ) ในเครื่องมือ Google Kubernetes บนที่อยู่ IP แบบคงที่ที่เลือก?

คำตอบ:


9

TL; DR Google Container Engine ที่ใช้ Kubernetes v1.1รองรับloadBalancerIPเพียงแค่ทำเครื่องหมาย IP ที่กำหนดโดยอัตโนมัติว่าเป็นแบบสแตติกแรก

Kubernetes v1.1 รองรับexternalIPs :

apiVersion: v1
kind: Service
spec:
  type: LoadBalancer
  loadBalancerIP: 10.10.10.10
  ...

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

โหลดข้ามภูมิภาคสมดุลเอกสารเป็นส่วนใหญ่สำหรับ Compute Engine และไม่ Kubernetes / เครื่องยนต์ตู้คอนเทนเนอร์, แต่ก็ยังคงมีประโยชน์โดยเฉพาะ "การกำหนดค่าบริการโหลดสมดุล" ส่วนหนึ่ง

หากคุณเพิ่งสร้าง Kubernetes LoadBalancer บน GCE มันจะสร้างเครือข่าย Compute Engine> เครือข่าย> เครือข่ายภาระการโหลด> กฎการส่งต่อชี้ไปที่กลุ่มเป้าหมายที่ทำจากเครื่องของคุณในคลัสเตอร์ของคุณ . ดูเหมือนว่าการลบเนมสเปซจะไม่ทำความสะอาดกฎที่สร้างขึ้น


ปรับปรุง

ตอนนี้ได้รับการสนับสนุนจริงแล้ว (แม้ว่าจะอยู่ภายใต้เอกสาร):

  1. ตรวจสอบว่าคุณกำลังใช้ Kubernetes 1.1 หรือใหม่กว่า (ภายใต้GKEแก้ไขคลัสเตอร์ของคุณและทำเครื่องหมาย "รุ่นโหนด")
  2. ภายใต้เครือข่าย> ที่อยู่ IP ภายนอกคุณควรจะมีแล้วบางส่วนชั่วคราวทำเครื่องหมายเป็นชี้ไปที่อินสแตนซ์ VM คลัสเตอร์ของคุณ (ถ้าไม่ได้หรือไม่แน่ใจการปรับครั้งโดยไม่ต้องloadBalancerIPรอจนกว่าคุณจะได้ไอพีภายนอกจัดสรรเมื่อคุณเรียกใช้kubectl get svcและมองขึ้นไปที่ IP ใน รายการในหน้านั้น) ทำเครื่องหมายหนึ่งของพวกเขาเป็นแบบคงที่ขอบอกว่ามันอยู่ภายนอก10.10.10.10คือ
  3. แก้ไขLoadBalancerของคุณให้มีloadBalancerIP=10.10.10.10ด้านบน (ปรับให้เข้ากับ IP ที่ Google มอบให้คุณ)

ตอนนี้ถ้าคุณลบ LoadBalancer ของคุณหรือแม้กระทั่ง namespace ของคุณก็ควรรักษาที่อยู่ IP นั้นเมื่อปรับใช้อีกครั้งในคลัสเตอร์นั้น หากคุณต้องการเปลี่ยนคลัสเตอร์ควรเล่นซอทำเองบางอย่าง:

  1. ภายใต้ส่วน“ การโหลดบาลานซ์เครือข่าย” แท็บ “ เป้าหมายกลุ่ม” คลิกปุ่ม“ สร้างกลุ่มเป้าหมาย”:
    • ชื่อ: cluster-pool(หรือชื่ออื่น ๆ )
    • ภูมิภาค: เลือกภูมิภาคของหนึ่งในกลุ่มของคุณ
    • ตรวจสุขภาพ: ทางเลือกถ้าคุณต้องการ
    • เลือกกลุ่มอินสแตนซ์ที่มีอยู่: คลัสเตอร์ Kubernetes ของคุณ
  2. ภายใต้ส่วน“ การโหลดบาลานซ์เครือข่าย” แท็บ“ กฎการส่งต่อ”คลิกปุ่ม“ สร้างกฎการส่งต่อ”
    • ชื่อ: http-cross-region-gfr(หรือชื่ออื่น ๆ )
    • ภูมิภาค: เลือกภูมิภาคของหนึ่งในกลุ่มของคุณ
    • IP ภายนอก: เลือกที่loadbalancer-ip-crossregionคุณเพิ่งจองไว้
    • กลุ่มเป้าหมาย: เลือกที่cluster-poolคุณเพิ่งสร้างขึ้น

สิ่งเหล่านั้นยังคงเกี่ยวข้องหรือไม่?
Ben

8

ข่าวดี. สิ่งนี้จะได้รับการแก้ไขใน Kubernetes v1.1 คุณสามารถตั้งค่าservice.spec.loadBalancerIPฟิลด์เป็น IP ที่คุณรู้ว่าคุณเป็นเจ้าของ


ก่อนหน้านี้:

นี่คือคุณสมบัติที่ตกอยู่ในรอยแตก มันควรจะใช้งานได้ (และอาจทำงานได้ในบางจุด) แต่ไม่ผ่านการทดสอบอย่างดีและแตกหักไปตามทางและจากนั้นออกแบบโดยไม่ตั้งใจ (ชั่วคราว)

เป็นรายการสั้น ๆ ของฉันสำหรับสิ่งที่ต้องแก้ไขหลังจาก 1.0

https://github.com/GoogleCloudPlatform/kubernetes/issues/10323


นี่น่าจะเป็นความเห็นไม่ใช่คำตอบ
วอร์ด - คืนสถานะโมนิก้า

5
@ รางวัล: "มันเป็นไปไม่ได้" จาก dev คือคำตอบ IMHO และเป็นที่ยอมรับเช่นนี้
สเวน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.