Saya dulu bisa menggulung
https://$KUBERNETES_SERVICE_HOST:$KUBERNETES_PORT_443_TCP_PORT/api/v1beta3/namespaces/default/
sebagai URL dasar saya, tetapi di kubernetes 0.18.0 memberi saya "tidak sah". Hal yang aneh adalah jika saya menggunakan alamat IP eksternal dari mesin API ( http://172.17.8.101:8080/api/v1beta3/namespaces/default/
), itu berfungsi dengan baik.
kubernetes
tslater.dll
sumber
sumber
$KUBERNETES_SERVICE_HOST
dan$KUBERNETES_PORT_443_TCP_PORT
?Jawaban:
Dalam dokumentasi resmi saya menemukan ini:
https://kubernetes.io/docs/tasks/access-application-cluster/access-cluster/#accessing-the-api-from-a-pod
Sepertinya saya kehilangan token keamanan yang tidak saya perlukan di versi Kubernetes sebelumnya. Dari situ, saya menemukan apa yang menurut saya merupakan solusi yang lebih sederhana daripada menjalankan proxy atau memasang golang di container saya. Lihat contoh ini yang mendapatkan informasi, dari api, untuk penampung saat ini:
Saya juga menggunakan include biner sederhana, jq ( http://stedolan.github.io/jq/download/ ), untuk mengurai json untuk digunakan dalam skrip bash.
sumber
v1beta3
kev1
--cacert
flag ke curl sehingga curl memvalidasi sertifikat yang diberikan oleh apiserver.KUBERNETES_SERVICE_HOST=kubernetes.default
,,$KUBERNETES_443_TCP_PORT=443
NAMESPACE == $ (</ var / run / secret / kubernetes.io / serviceaccount / namespace). The URL was
kubernetes.default: 443 / api / v1 / namespaces / $ NAMESPACE / pods /… `. Perhatikan bahwa versi API disetel ke v1, bukan v1beta3 dan namespace default diganti dengan $ NAMESPACE.Setiap pod memiliki akun layanan yang secara otomatis diterapkan yang memungkinkannya untuk mengakses apiserver. Akun layanan menyediakan kredensial klien, dalam bentuk token pembawa, dan sertifikat otoritas sertifikat yang digunakan untuk menandatangani sertifikat yang diberikan oleh apiserver. Dengan dua informasi ini, Anda dapat membuat koneksi yang aman dan terotentikasi ke apisever tanpa menggunakan
curl -k
(aliascurl --insecure
):sumber
--root-ca-file=
argumen saat dimulai. (ini ditangani secara otomatis di sebagian besar penginstal kubernetes). Lihat diskusi di sini untuk detail lebih lanjut: github.com/kubernetes/kubernetes/issues/10265https://kubernetes.default/
sebagai tuan rumahkubernetes.default.svc
seperti yang didokumentasikan di kubernetes.io/docs/tasks/access-application-cluster/…Menggunakan klien Python kubernetes ..
sumber
versi wget:
sumber
Tambahan terpenting untuk detail yang telah disebutkan di atas adalah bahwa pod tempat Anda mencoba mengakses server API harus memiliki kemampuan RBAC untuk melakukannya.
Setiap entitas di sistem k8s diidentifikasi oleh akun layanan (seperti akun pengguna yang digunakan untuk pengguna). Berdasarkan kemampuan RBAC, token akun layanan (/var/run/secrets/kubernetes.io/serviceaccount/token) diisi. Binding kube-api (misalnya pykube) dapat menggunakan token ini sebagai input saat membuat koneksi ke server kube-api. Jika pod memiliki kapabilitas RBAC yang tepat, pod tersebut akan dapat membuat koneksi dengan server kube-api.
sumber
Saya mengalami masalah ini saat mencoba mengakses API dari dalam pod menggunakan Go Code. Di bawah ini adalah apa yang saya terapkan untuk membuatnya berfungsi, jika seseorang menemukan pertanyaan ini ingin menggunakan Go juga.
Contoh ini menggunakan resource pod, di mana Anda harus menggunakan
client-go
library tersebut jika Anda bekerja dengan objek kubernetes native. Kode ini lebih berguna bagi mereka yang bekerja dengan CustomResourceDefintions.sumber
Dari dalam pod, server kubernetes api dapat diakses langsung di " https: //kubernetes.default ". Secara default menggunakan "akun layanan default" untuk mengakses server api.
Jadi, kita juga perlu meneruskan "ca cert" dan "token akun layanan default" untuk mengautentikasi dengan server api.
file sertifikat disimpan di lokasi berikut di dalam pod: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
dan token akun layanan default di: /var/run/secrets/kubernetes.io/serviceaccount/token
Anda dapat menggunakan klien godaddy nodejs kubbernetes .
sumber
Saya mengalami masalah autentikasi serupa di GKE di mana skrip python tiba-tiba memberikan pengecualian. Solusi yang berhasil bagi saya adalah memberikan izin kepada pod melalui peran
untuk informasi lebih lanjut masukkan deskripsi tautan di sini
sumber
Untuk siapa pun yang menggunakan Google Container Engine (diberdayakan oleh Kubernetes):
Panggilan sederhana ke
https://kubernetes
dari dalam cluster menggunakan klien kubernetes ini untuk pekerjaan Java .sumber
Dengan RBAC diaktifkan, akun layanan default tidak memiliki izin apa pun.
Lebih baik buat akun layanan terpisah untuk kebutuhan Anda dan gunakan untuk membuat pod Anda.
Dijelaskan dengan baik di sini https://developer.ibm.com/recipes/tutorials/service-accounts-and-auditing-in-kubernetes/
sumber
Versi k8s saya adalah 1.2.0, dan di versi lain seharusnya berfungsi juga ^ ^
sumber
This is from the
Kubernetes Beraksibook.
Anda perlu menjaga otentikasi . Server API itu sendiri mengatakan Anda tidak berwenang untuk mengaksesnya, karena tidak tahu siapa Anda .
Untuk mengautentikasi, Anda memerlukan token otentikasi. Untungnya, token disediakan melalui Rahasia token default yang disebutkan sebelumnya, dan disimpan dalam file token di volume rahasia.
Anda akan menggunakan token untuk mengakses server API . Pertama, muat token ke dalam variabel lingkungan:
Token sekarang disimpan di variabel lingkungan TOKEN . Anda dapat menggunakannya saat mengirim permintaan ke server API:
sumber