Jika Anda memiliki kluster Kubernetes yang dikelola sendiri yang berjalan di pusat data lokal (IDC) atau pada instance ECS Alibaba Cloud, Anda harus men-deploy node virtual (VNode) di kluster tersebut untuk menggunakan ECI. Topik ini menjelaskan cara mengonfigurasi sertifikat dan membuat VNode secara manual untuk kluster Kubernetes yang dikelola sendiri.
Prasyarat
-
Anda memiliki kluster Kubernetes versi 1.16 hingga 1.30.
-
Jika kluster Kubernetes Anda dideploy di pusat data lokal, pastikan jaringan pusat data terhubung ke jaringan Alibaba Cloud melalui Express Connect, Smart Access Gateway (SAG), atau VPN Gateway. Untuk informasi selengkapnya, lihat topik berikut:
Sebelum memulai
Sebelum membuat VNode, kumpulkan parameter yang diperlukan dan tinjau izin yang dibutuhkan. Tabel berikut menjelaskan parameter yang akan Anda perlukan.
|
Parameter |
Deskripsi |
Cara Mendapatkan |
|
region |
Wilayah adalah pusat data fisik. Pilih wilayah berdasarkan faktor seperti lokasi Anda, lokasi pengguna target, dan harga resource. Untuk informasi selengkapnya, lihat Wilayah dan zona ketersediaan. ECI dan resource terkaitnya dibuat di wilayah yang dipilih. |
Anda dapat menemukan wilayah yang didukung ECI di Konsol Elastic Container Instance atau dengan memanggil operasi DescribeRegions. |
|
VPC |
VPC adalah jaringan pribadi kustom yang Anda buat di Alibaba Cloud. VPC saling terisolasi secara logis. Untuk informasi selengkapnya, lihat Apa itu VPC?. ECI dan resource terkaitnya dibuat di VPC yang Anda konfigurasi. Catatan
Jika kluster Kubernetes Anda dideploy di pusat data lokal, pastikan jaringan pusat data dapat mencapai VPC ini. |
Anda dapat membuat dan melihat VPC di halaman VPC pada Konsol VPC. |
|
vSwitch |
vSwitch adalah perangkat jaringan dasar dalam VPC yang menghubungkan berbagai resource cloud. Saat Anda membuat ECI dan resource terkaitnya dalam VPC, Anda harus menentukan satu atau beberapa vSwitch, dan sistem akan memilih salah satunya secara otomatis. |
Anda dapat membuat dan melihat vSwitch di halaman vSwitch pada Konsol VPC. Pilih vSwitch yang termasuk dalam VPC yang dipilih. |
|
security group |
Security group adalah firewall virtual yang mengontrol lalu lintas inbound dan outbound dari resource dalam kelompok tersebut untuk meningkatkan keamanan jaringan. Untuk informasi selengkapnya, lihat Ikhtisar security group. ECI dan resource terkaitnya ditambahkan ke security group tersebut. Catatan
Kami menyarankan Anda menggunakan enterprise security group dan menambahkan aturan masuk berikut:
|
Anda dapat membuat dan melihat security group di halaman Security Group pada Konsol ECS. Pilih security group yang termasuk dalam VPC yang dipilih. |
Saat membuat VNode, Anda harus mengonfigurasi izin yang diperlukan. Ini mencakup izin standar yang digunakan oleh node Kubernetes native dan izin tambahan khusus VNode, seperti dijelaskan dalam tabel berikut.
|
Jenis |
Izin |
Deskripsi |
|
Izin standar |
system:node |
Izin node standar. |
|
system:node-proxier |
Izin kube-proxy standar. |
|
|
system:certificates.k8s.io:certificatesigningrequests:nodeclient |
Mengizinkan node membuat permintaan penandatanganan sertifikat (CSR). |
|
|
system:certificates.k8s.io:certificatesigningrequests:selfnodeclient |
Mengizinkan node meminta sertifikat baru berdasarkan sertifikat yang sudah ada. Ini memungkinkan rotasi sertifikat. |
|
|
Izin tambahan |
pods update dan pods patch |
Mengizinkan VNode memperbarui anotasi pod, misalnya menambahkan anotasi yang dihitung seperti |
|
pvc update dan pvc patch |
Mengizinkan VNode memperbarui anotasi PersistentVolumeClaim (PVC). |
Konfigurasi kluster
VNode menggunakan file kubeconfig untuk terhubung ke kluster. Oleh karena itu, Anda harus menerbitkan sertifikat (kubeconfig) untuk VNode sebelum membuatnya.
Jika Anda menggunakan sertifikat admin kluster, Anda dapat melewati bagian ini.
-
Hubungkan ke kluster.
-
Unduh dan jalankan skrip konfigurasi. Pilih TLS bootstrapping atau ServiceAccount untuk menghasilkan file kubeconfig.
TLS Bootstrap
Untuk keamanan yang lebih baik, kami merekomendasikan TLS bootstrapping. Metode ini secara otomatis men-deploy komponen vnode-approver. Komponen ini menandatangani CSR yang diajukan oleh VNode dan bersifat open source di GitHub. Untuk informasi selengkapnya, lihat vnode-approver.
curl -fsSL https://eci-docs.oss-cn-beijing.aliyuncs.com/vnode/vnode-deploy.sh | bash -s -- bootstrapServiceAccount
Metode ini tidak mendukung rotasi sertifikat. Pastikan token memiliki periode validitas yang panjang atau tidak kedaluwarsa. Hal ini mencegah VNode menjadi tidak tersedia akibat sertifikat yang kedaluwarsa.
curl -fsSL https://eci-docs.oss-cn-beijing.aliyuncs.com/vnode/vnode-deploy.sh | bash -s -- common -
Periksa file kubeconfig.
File kubeconfig yang dihasilkan bernama vnode-config. Jalankan perintah berikut untuk melihat file tersebut:
cat vnode-configSaat memeriksa file, verifikasi hal berikut:
-
Pastikan VPC tempat VNode akan dibuat dapat mencapai alamat server (misalnya, berada di VPC yang sama atau terhubung melalui jaringan).
-
Jika alamat server berupa alamat IP, alamat tersebut harus dapat diakses dari VPC VNode.
-
Jika alamat server berupa nama domain, nama tersebut harus dapat diselesaikan dalam VPC Alibaba Cloud, dan alamat IP hasilnya harus dapat diakses dari VPC VNode.
-
-
Jika parameter
certificate-authority-datakosong, periksa apakah bidang yang sesuai dalam file~/.kube/configmenggunakan path file.
TLS Bootstrap
apiVersion: v1 kind: Config current-context: kubernetes-admin@kubernetes contexts: - name: kubernetes-admin@kubernetes context: cluster: kubernetes-admin@kubernetes user: vnode namespace: kube-system clusters: - name: kubernetes-admin@kubernetes cluster: certificate-authority-data: "*****************************************==" server: https://10.16.XX.XX:6443 users: - name: vnode user: token: ******.****************ServiceAccount
apiVersion: v1 kind: Config current-context: kubernetes-admin@kubernetes contexts: - name: kubernetes-admin@kubernetes context: cluster: kubernetes-admin@kubernetes user: vnode namespace: kube-system clusters: - name: kubernetes-admin@kubernetes cluster: certificate-authority-data: "*****************************************==" server: https://10.16.XX.XX:6443 users: - name: vnode user: token: *********************************************** -
Buat VNode
Prosedur
Anda dapat membuat VNode di Konsol Elastic Container Instance atau dengan memanggil operasi API.
Konsol
-
Login ke Konsol Elastic Container Instance.
-
Di bilah navigasi atas, pilih wilayah.
-
Di panel navigasi kiri, pilih Virtual Node.
-
Klik Create Virtual Node.
-
Konfigurasi parameter dan klik OK.
Tabel berikut menjelaskan parameter tersebut.
Parameter
Deskripsi
VPC, vSwitch, security group
VPC, vSwitch, dan security group untuk VNode. Resource ini harus disiapkan seperti yang dijelaskan di bagian Sebelum memulai.
KubeConfig
kubeconfig dari kluster Kubernetes tempat VNode terhubung. File ini harus dihasilkan seperti yang dijelaskan di bagian Konfigurasi kluster.
TlsBootstrapEnabled
Menentukan apakah akan mengaktifkan TLS bootstrapping.
Aktifkan parameter ini jika Anda menghasilkan file kubeconfig menggunakan metode TLS bootstrap. Ini juga mengaktifkan rotasi sertifikat, yang memungkinkan VNode meminta sertifikat baru secara otomatis sebelum sertifikat saat ini kedaluwarsa.
Tags
Tag untuk mengikat VNode.
Anda dapat menggunakan tag untuk alokasi biaya. Setelah mengikat tag kustom ke VNode, Anda dapat menggunakan tag tersebut untuk memfilter biaya instans VNode selama analisis biaya. Untuk informasi selengkapnya, lihat Lihat tagihan terpisah berdasarkan tag.
Taints
Taints yang diterapkan ke VNode.
resource group
Resource group adalah fitur yang dapat Anda gunakan untuk mengelompokkan resource di bawah Akun Alibaba Cloud Anda. Setiap akun memiliki resource group default. Untuk informasi selengkapnya, lihat Resource Management.
Jika Anda tidak menentukan resource group, VNode akan ditambahkan ke resource group default.
API
Anda dapat memanggil operasi CreateVirtualNode untuk membuat VNode. Tabel berikut menjelaskan parameter utamanya. Untuk informasi selengkapnya, lihat CreateVirtualNode.
|
Nama |
Tipe |
Contoh |
Deskripsi |
|
RegionId |
String |
cn-shanghai |
ID wilayah. |
|
VSwitchId |
String |
vsw-2ze23nqzig8inprou**** |
ID vSwitch yang digunakan oleh VNode dan instans ECI-nya. Anda dapat menentukan 1 hingga 10 vSwitch yang termasuk dalam VPC yang sama. |
|
SecurityGroupId |
String |
sg-2ze81zoc3yl7a3we**** |
ID security group. VNode dan instans ECI-nya ditambahkan ke security group ini. |
|
KubeConfig |
String |
JTVDbmFwaVZlcnNpb24lM0ElMjB2MSU1Q25jbHVzdGVycyUzQSU1Q24tJTIwY2x1c3RlciUzQSU1Q24uLi****** |
kubeconfig untuk kluster Kubernetes VNode. Nilainya harus dikodekan Base64. |
|
TlsBootstrapEnabled |
Boolean |
true |
Aktifkan parameter ini jika Anda menghasilkan file kubeconfig menggunakan metode TLS bootstrap. Ini juga mengaktifkan rotasi sertifikat, yang memungkinkan VNode meminta sertifikat baru secara otomatis sebelum sertifikat saat ini kedaluwarsa. |
Verifikasi hasil
Setelah membuat VNode, tunggu beberapa saat. Kemudian, login ke kluster Kubernetes dan jalankan perintah kubectl get nodes untuk melihat informasi node.
-
Jika VNode ditemukan, berarti pembuatan berhasil. Output yang diharapkan mirip dengan berikut:
[root@k8s-master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION cn-beijing.vnd-2-xxx.sx61at Ready agent 132m v1.20.6 k8s-master Ready control-plane,master 169m v1.20.6 -
Jika VNode tidak ditemukan, pembuatan gagal. Kami menyarankan Anda melakukan troubleshooting berdasarkan event VNode.
Di Konsol Elastic Container Instance, buka halaman Virtual Node. Klik ID VNode target, lalu lihat event di tab Events.
Daftar berikut menjelaskan error event umum:
-
failed to get kubernetes server version, Get \"https://10.50.XX.XX:6443/version?timeout=32s\": net/http: request canceled (Client.Timeout exceeded while awaiting headersError ini menunjukkan bahwa VPC tempat VNode berada tidak dapat terhubung ke alamat IP server API Kubernetes. Pastikan VNode dan server API berada di VPC yang sama. Jika tidak, pastikan keduanya memiliki konektivitas jaringan.
-
failed to get kubernetes server version, Get \"https://lb.kubesphere.local:6443/version?timeout=32s\": dial tcp: lookup lb.kubesphere.local on 100.100.X.:53: no such hostError ini menunjukkan bahwa nama domain server API Kubernetes tidak dapat diselesaikan di VPC. Anda dapat mengonfigurasi Alibaba Cloud DNS PrivateZone untuk menambahkan rekaman DNS untuk nama domain tersebut.
-
Jika Anda memiliki pertanyaan atau masalah saat menghubungkan VNode ke kluster Kubernetes yang dikelola sendiri, cari grup DingTalk 44666389 untuk bergabung ke grup dukungan VNode.
Cegah penjadwalan DaemonSet ke VNode
VNode adalah node virtual dan tidak dapat menjalankan DaemonSet. Setelah membuat VNode, Anda harus menambahkan nodeAffinity ke DaemonSet kube-proxy untuk mencegah DaemonSet dijadwalkan ke VNode.
-
Edit konfigurasi DaemonSet.
kubectl -n kube-system edit ds kube-proxy -
Konfigurasi nodeAffinity.
Tambahkan YAML berikut ke
spec.template.spec:affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: type operator: NotIn values: - virtual-kubelet
Jadwalkan pod ke VNode
Setelah membuat VNode, Anda dapat menggunakan metode berikut untuk menjadwalkan pod agar berjalan sebagai instans ECI di VNode.
-
Penjadwalan manual
Anda dapat menjadwalkan pod ke VNode secara manual dengan mengonfigurasi nodeSelector dan tolerations, atau dengan menentukan nodeName. Untuk informasi selengkapnya, lihat Jadwalkan pod ke VNode.
-
Penjadwalan otomatis
Setelah men-deploy komponen eci-profile, Anda dapat mengonfigurasi selector kustom untuk secara otomatis menjadwalkan pod yang cocok ke VNode. Untuk informasi selengkapnya, lihat Gunakan eci-profile untuk menjadwalkan pod ke VNode.