Score:2

ส่งต่อ IP ของผู้ร้องขอจริงในการเข้า K3S NGINX

ธง za

ฉันได้ตั้งค่า K3S Kubernetes Environment ใน Home-Lab ส่วนตัวของฉันบน Raspberry PI เพื่อสอนตัวเองเกี่ยวกับ Kubernetes (Noob-Alert) โดยใช้ NGINX เป็น Ingress Controller และฉันค่อนข้างติดขัดที่การส่งคำขอ IP จริง ไปยัง Pods เป้าหมาย ในกรณีของฉันคืออินสแตนซ์ Nextcloud เวอร์ชันของ K3S คือ v1.22.5+k3s1.

K3S ได้รับการตั้งค่าโดยใช้ Docker เป็นคอนเทนเนอร์รันไทม์และด้วย --no-ปรับใช้ traefik ตัวเลือก.

หลังจากนั้นฉันก็ปรับใช้ NGINX Ingress Controller โดยใช้

kubectl ใช้ -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.0/deploy/static/provider/baremetal/deploy.yaml

จากนั้น หลังจากปรับใช้พ็อด Nextcloud ฉันปรับใช้ Ingress:

รุ่น api: networking.k8s.io/v1
ชนิด: ทางเข้า
ข้อมูลเมตา:
  ชื่อ: nginx-ingress
  คำอธิบายประกอบ:
    nginx.ingress.kubernetes.io/force-ssl-redirect: "จริง"
ข้อมูลจำเพาะ:
  tls:
  - เจ้าภาพ:
    - my.own-dns.org
    ชื่อลับ: ลับมาก-ssl-ลับ
  ชื่อคลาส ingress: nginx
  กฎ:
  - โฮสต์: my.own-dns.org
    http:
      เส้นทาง:
        - เส้นทาง: /somepath
          pathType: คำนำหน้า
          แบ็กเอนด์:
            บริการ:
              ชื่อ: someservice-บริการ
              ท่า:
                หมายเลข: 8081
        - เส้นทาง: /
          pathType: คำนำหน้า
          แบ็กเอนด์:
            บริการ:
              ชื่อ: บริการ nextcloud
              ท่า:
                จำนวน: 80

ในการปรับใช้ IngressController ฉันได้เพิ่มรายการต่อไปนี้ใน ConfigMap:

api เวอร์ชัน: v1
ประเภท: ConfigMap
ข้อมูลเมตา:
  ป้ายกำกับ:
    helm.sh/chart: ingress-nginx-4.0.10
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/version: 1.1.0
    app.kubernetes.io/managed-by: หางเสือ
    app.kubernetes.io/component: ตัวควบคุม
  ชื่อ: ingress-nginx-controller
  เนมสเปซ: ingress-nginx
ข้อมูล:
  Allow-snippet-annotations: 'จริง'
  คำนวณเต็มส่งต่อสำหรับ: 'จริง'
  ใช้ส่งต่อส่วนหัว: 'จริง'
  enable-real-ip: 'จริง'
  proxy-add-original-uri-header: 'จริง'
  ส่งต่อสำหรับส่วนหัว: 'X-ส่งต่อสำหรับ'

และเปลี่ยน ServiceType จากบริการ http เป็น โหลดบาลานเซอร์ดังนั้นบริการ IngressController ของฉันจึงมีลักษณะดังนี้:

api เวอร์ชัน: v1
ชนิด:บริการ
ข้อมูลเมตา:
  คำอธิบายประกอบ:
  ป้ายกำกับ:
    helm.sh/chart: ingress-nginx-4.0.10
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/version: 1.1.0
    app.kubernetes.io/managed-by: หางเสือ
    app.kubernetes.io/component: ตัวควบคุม
  ชื่อ: ingress-nginx-controller
  เนมสเปซ: ingress-nginx
ข้อมูลจำเพาะ:
  ประเภท: LoadBalancer
  ipFamilyPolicy: SingleStack
  ครอบครัว IP:
    - IPv4
  พอร์ต:
    - ชื่อ: http
      พอร์ต: 80
      โปรโตคอล: TCP
      พอร์ตเป้าหมาย: http
      โปรโตคอลแอป: http
    - ชื่อ: https
      พอร์ต: 443
      โปรโตคอล: TCP
      พอร์ตเป้าหมาย: https
      โปรโตคอลแอป: https
  ตัวเลือก:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/component: ตัวควบคุม

จนถึงตอนนี้ดีมาก การเข้าถึงอินสแตนซ์ Nextcloud จากอินเทอร์เน็ตใช้งานได้ดี รวมถึงการเปลี่ยนเส้นทางไปยัง https เป็นต้น แต่บันทึกการตรวจสอบ Nextcloud ได้รับเฉพาะ IP ของคลัสเตอร์ภายในเป็น IP ต้นทาง (น่าแปลกที่ไม่มี IP จากบริการใด ๆ ที่ฉันใช้งานอยู่ภายในคลัสเตอร์ ) ไม่ใช่ของจริงจากนอกโลก

แล้วฉันพลาดอะไรไป? ฉันลองตั้งค่า ใช้พร็อกซีโปรโตคอล เป็นจริง แต่สิ่งนี้ส่งผลให้ก ERR_CONNECTION_RESET.

Score:0
ธง cn

คุณลองตั้งค่า spec.externalTrafficPolicy เป็น local แล้วหรือยัง มองไปที่ เอกสาร Kubernetes เกี่ยวกับความหมาย

โพสต์คำตอบ

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