Score:0

ใช้ .kube/config Client certs ใน curl

ธง cn

ถ้าคุณใช้ kubectl รับ pod foo -v10 คุณเห็น ขด ไลน์แต่ใช้ไม่ได้

ตัวอย่าง:

guettli@p15:~$ curl -k -v -XGET -H "ยอมรับ: application/json;as=Table;v=v1;g=meta.k8s.io,application/json;as=Table;v=v1beta1; g=meta.k8s.io,application/json" -H "ตัวแทนผู้ใช้: kubectl/v1.23.4 (linux/amd64) kubernetes/e6c093d" 'https://127.0.0.1:44529/api/v1/namespaces/ default/pods/busybox' 

* ลอง 127.0.0.1:44529...
* เชื่อมต่อกับพอร์ต 127.0.0.1 (127.0.0.1) 44529 (#0)
* ALPN ให้บริการ h2
* ALPN ให้บริการ http/1.1
* ตั้งค่าตำแหน่งการตรวจสอบใบรับรองสำเร็จแล้ว:
* ไฟล์ CA: /etc/ssl/certs/ca-certificates.crt
* CApath: /etc/ssl/certs
* TLSv1.3 (ออก), การจับมือ TLS, สวัสดีลูกค้า (1):
* TLSv1.3 (IN), การจับมือ TLS, สวัสดีเซิร์ฟเวอร์ (2):
* TLSv1.3 (IN), TLS handshake, ส่วนขยายที่เข้ารหัส (8):
* TLSv1.3 (IN), การจับมือ TLS, ขอ CERT (13):
* TLSv1.3 (IN), การจับมือ TLS, ใบรับรอง (11):
* TLSv1.3 (IN), TLS handshake, CERT ยืนยัน (15):
* TLSv1.3 (IN), การจับมือ TLS, เสร็จสิ้น (20):
* TLSv1.3 (ออก), TLS เปลี่ยนรหัส, เปลี่ยนข้อมูลจำเพาะของรหัส (1):
* TLSv1.3 (ออก), การจับมือ TLS, ใบรับรอง (11):
* TLSv1.3 (ออก), การจับมือ TLS, เสร็จสิ้น (20):
* การเชื่อมต่อ SSL โดยใช้ TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN เซิร์ฟเวอร์ที่ยอมรับให้ใช้ h2
* ใบรับรองเซิร์ฟเวอร์:
* หัวเรื่อง: CN=kube-apiserver
* วันที่เริ่มต้น: 2 กุมภาพันธ์ 10:34:41 น. 2022 GMT
* วันหมดอายุ: 2 ก.พ. 10:34:41 น. 2023 GMT
* ผู้ออก: CN=kubernetes
* ผลการตรวจสอบใบรับรอง SSL: ไม่สามารถรับใบรับรองผู้ออกในท้องถิ่น (20) ดำเนินการต่อไป
* การใช้ HTTP2 เซิร์ฟเวอร์รองรับการใช้งานหลายอย่าง
* เปลี่ยนสถานะการเชื่อมต่อ (ยืนยัน HTTP/2)
* การคัดลอกข้อมูล HTTP/2 ในสตรีมบัฟเฟอร์ไปยังบัฟเฟอร์การเชื่อมต่อหลังจากอัปเกรด: len=0
* การใช้ Stream ID: 1 (จัดการง่าย 0x55ef6413b5e0)
> รับ /api/v1/namespaces/default/pods/busybox HTTP/2
> โฮสต์: 127.0.0.1:44529
> ยอมรับ: application/json;as=Table;v=v1;g=meta.k8s.io,application/json;as=Table;v=v1beta1;g=meta.k8s.io,application/json
> ตัวแทนผู้ใช้: kubectl/v1.23.4 (linux/amd64) kubernetes/e6c093d
> 
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* เปลี่ยนสถานะการเชื่อมต่อ (MAX_CONCURRENT_STREAMS == 250)!
< HTTP/2 403 
< การควบคุมแคช: ไม่มีแคช เป็นส่วนตัว
< ประเภทเนื้อหา: แอปพลิเคชัน/json
< x-content-type-options: nosniff
< x-kubernetes-pf-flowschema-uid: d45b0ee7-7e06-463e-b8d1-6ab74852b967
< x-kubernetes-pf-prioritylevel-uid: 3be84978-2771-4afe-972d-50dec7f8b951
< ความยาวเนื้อหา: 289
< วันที่: จันทร์ที่ 21 กุมภาพันธ์ 2022 17:20:21 GMT
< 

{"kind":"Status","apiVersion":"v1","metadata":{},
 "สถานะ":"ล้มเหลว",
 "message":"pods \"busybox\" เป็นสิ่งต้องห้าม: ผู้ใช้ \"system:anonymous\" ไม่สามารถรับทรัพยากร \"pods\" ในกลุ่ม API \"\" ในเนมสเปซ \"default\"",
 "เหตุผล":"ต้องห้าม",
 "รายละเอียด":{"ชื่อ":"busybox","ชนิด":"pods"},"code":403}

* การเชื่อมต่อ #0 ไปยังโฮสต์ 127.0.0.1 ยังคงอยู่

ฉันจะใช้ใบรับรองไคลเอนต์ที่อยู่ใน .kube/config?

ฉันใช้ชนิด 0.11.1

in flag
คุณได้ลองทำอะไรไปแล้วบ้าง นอกจากการคาดหวังว่า `curl` จะแยกวิเคราะห์ไฟล์ yaml ของ kubeconfig อย่างน่าอัศจรรย์ นอกจากนี้ ด้วยจิตวิญญาณของ "ปัญหา X/Y" ดูเหมือนว่าคุณต้องการนำ `kubectl` มาใช้ใหม่โดยใช้ bash จำนวนมากด้วยเหตุผลบางอย่าง
Score:1
ธง cn

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

แมว .kube/config | yq .clusters[0].cluster.certificate-authority-data | base64 -d - > .kube/ca.pem

แมว .kube/config | yq .users[0].user.client-certificate-data | base64 -d - > .kube/user.pem

แมว .kube/config | yq .users[0].user.client-key-data | base64 -d - > .kube/user-key.pem
ขด --cert .kube/user.pem --key .kube/user-key.pem --cacert .kube/ca.pem \
  -v -XGET -H "ยอมรับ: application/json;as=Table;v=v1;g=meta.k8s.io,application/json;as=Table;v=v1beta1;g=meta.k8s.io,application /json" \
  -H "ตัวแทนผู้ใช้: kubectl/v1.23.4 (linux/amd64) kubernetes/e6c093d" \
 'https://127.0.0.1:44529/api/v1/namespaces/default/pods/busybox'
Score:0
ธง us

ฉันได้ทำการวิจัยบางอย่าง วิธีการทำงานของฉันอยู่ด้านล่าง:

จำเป็นต้องใช้เครื่องหมายคำพูดเนื่องจากมีเครื่องหมายขีดคั่นในชื่อแท็ก:

แมว ~/.kube/config | yq -r '.clusters[0].cluster."ใบรับรอง-ผู้มีอำนาจ-ข้อมูล"' | base64 -d - > ~/.kube/ca.pem 
แมว ~/.kube/config | yq -r '.users[0].user."client-certificate-data"' | base64 -d - > ~/.kube/user.pem
แมว ~/.kube/config | yq -r '.users[0].user."client-key-data"' | base64 -d - > ~/.kube/user-key.pem

อีกหนึ่งตัวแปรที่มีประโยชน์:

SERVER_URL=$(cat ~/.kube/config | yq -r .clusters[0].cluster.server)

ตัวอย่างขด:

curl --cacert ~/.kube/ca.pem --cert ~/.kube/user.pem --key ~/.kube/user-key.pem -X รับ ${SERVER_URL}/api/v1/namespaces/ default/pods/busybox

โพสต์คำตอบ

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