Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menggunakan kebijakan grup keamanan untuk Amazon EKS Pod
Untuk menggunakan grup keamanan untuk Pods, Anda harus memiliki grup keamanan yang ada. Langkah-langkah berikut menunjukkan cara menggunakan kebijakan grup keamanan untuk Pod. Kecuali dinyatakan lain, selesaikan semua langkah dari terminal yang sama karena variabel digunakan dalam langkah-langkah berikut yang tidak bertahan di seluruh terminal.
Jika Anda memiliki Pod dengan EC2 contoh Amazon, Anda harus mengkonfigurasi plugin sebelum Anda menggunakan prosedur ini. Untuk informasi selengkapnya, lihat Konfigurasikan Amazon VPC CNI plugin for Kubernetes untuk grup keamanan untuk Amazon EKS Pods.
-
Buat Kubernetes namespace untuk menyebarkan sumber daya ke. Anda dapat mengganti
my-namespace
dengan nama namespace yang ingin Anda gunakan.kubectl create namespace my-namespace
-
Menerapkan Amazon EKS
SecurityGroupPolicy
ke cluster Anda.-
Salin konten berikut ke perangkat Anda. Anda dapat mengganti
podSelector
denganserviceAccountSelector
jika Anda lebih suka memilih Pods berdasarkan label akun layanan. Anda harus menentukan satu selektor atau yang lainnya. Sebuah kosongpodSelector
(contoh:podSelector: {}
) memilih semua Pods di namespace. Anda bisa berubahmy-role
dengan nama peran Anda.serviceAccountSelector
yang kosong memilih semua akun layanan di namespace. Anda dapat menggantimy-security-group-policy
dengan nama untuk AndaSecurityGroupPolicy
danmy-namespace
dengan namespace yang ingin Anda buat di.SecurityGroupPolicy
Anda harus mengganti
my_pod_security_group_id
dengan ID grup keamanan yang ada. Jika Anda tidak memiliki grup keamanan yang ada, maka Anda harus membuatnya. Untuk informasi selengkapnya, lihat Grup EC2 keamanan Amazon untuk instans Linux di Panduan EC2 Pengguna Amazon. Anda dapat menentukan 1-5 grup IDs keamanan. Jika Anda menentukan lebih dari satu ID, maka kombinasi semua aturan di semua grup keamanan efektif untuk yang dipilih Pods.cat >my-security-group-policy.yaml <<EOF apiVersion: vpcresources.k8s.aws/v1beta1 kind: SecurityGroupPolicy metadata: name: my-security-group-policy namespace: my-namespace spec: podSelector: matchLabels: role: my-role securityGroups: groupIds: - my_pod_security_group_id EOF
penting
Grup keamanan atau grup yang Anda tentukan untuk Pods harus memenuhi kriteria berikut:
-
Mereka harus ada. Jika mereka tidak ada, maka, ketika Anda menerapkan Pod yang cocok dengan pemilih, Anda Pod tetap terjebak dalam proses pembuatan. Jika Anda menggambarkan Pod, Anda akan melihat pesan kesalahan yang mirip dengan yang berikut:
An error occurred (InvalidSecurityGroupID.NotFound) when calling the CreateNetworkInterface operation: The securityGroup ID '
.sg-05b1d815d1EXAMPLE
' does not exist -
Mereka harus mengizinkan komunikasi masuk dari grup keamanan yang diterapkan ke node Anda (untuk
kubelet
) melalui port apa pun yang telah Anda konfigurasi probe. -
Mereka harus mengizinkan komunikasi keluar
TCP
danUDP
port 53 ke grup keamanan yang ditugaskan ke Pods (atau node yang Pods jalankan) berjalan CoreDNS. Kelompok keamanan untuk Anda CoreDNS Pods harus mengizinkan lalu lintas masukTCP
danUDP
port 53 dari grup keamanan yang Anda tentukan. -
Mereka harus memiliki aturan masuk dan keluar yang diperlukan untuk berkomunikasi dengan orang lain Pods bahwa mereka perlu berkomunikasi dengan.
-
Mereka harus memiliki aturan yang memungkinkan Pods untuk berkomunikasi dengan Kubernetes kontrol pesawat jika Anda menggunakan kelompok keamanan dengan Fargate. Cara termudah untuk melakukannya adalah dengan menentukan grup keamanan klaster sebagai salah satu grup keamanan.
Kebijakan grup keamanan hanya berlaku untuk yang baru dijadwalkan Pods. Mereka tidak memengaruhi berlari Pods.
-
-
Deploy kebijakan.
kubectl apply -f my-security-group-policy.yaml
-
-
Menerapkan aplikasi sampel dengan label yang cocok
my-role
nilai untukpodSelector
yang Anda tentukan pada langkah sebelumnya.-
Salin konten berikut ke perangkat Anda. Ganti
example values
dengan milik Anda sendiri dan kemudian jalankan perintah yang dimodifikasi. Jika Anda menggantimy-role
, pastikan itu sama dengan nilai yang Anda tentukan untuk pemilih pada langkah sebelumnya.cat >sample-application.yaml <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment namespace: my-namespace labels: app: my-app spec: replicas: 4 selector: matchLabels: app: my-app template: metadata: labels: app: my-app role: my-role spec: terminationGracePeriodSeconds: 120 containers: - name: nginx image: public.ecr.aws/nginx/nginx:1.23 ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: my-app namespace: my-namespace labels: app: my-app spec: selector: app: my-app ports: - protocol: TCP port: 80 targetPort: 80 EOF
-
Deploy aplikasi dengan perintah berikut. Saat Anda menggunakan aplikasi, Amazon VPC CNI plugin for Kubernetes cocok dengan
role
label dan grup keamanan yang Anda tentukan pada langkah sebelumnya diterapkan ke Pod.kubectl apply -f sample-application.yaml
-
-
Lihat Pods dikerahkan dengan aplikasi sampel. Untuk sisa topik ini, terminal ini disebut sebagai
TerminalA
.kubectl get pods -n my-namespace -o wide
Contoh output adalah sebagai berikut.
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES my-deployment-5df6f7687b-4fbjm 1/1 Running 0 7m51s 192.168.53.48 ip-192-168-33-28.region-code.compute.internal <none> <none> my-deployment-5df6f7687b-j9fl4 1/1 Running 0 7m51s 192.168.70.145 ip-192-168-92-33.region-code.compute.internal <none> <none> my-deployment-5df6f7687b-rjxcz 1/1 Running 0 7m51s 192.168.73.207 ip-192-168-92-33.region-code.compute.internal <none> <none> my-deployment-5df6f7687b-zmb42 1/1 Running 0 7m51s 192.168.63.27 ip-192-168-33-28.region-code.compute.internal <none> <none>
catatan
Coba tips ini jika ada Pods terjebak.
-
Jika ada Pods terjebak di
Waiting
negara bagian, lalu larikubectl describe pod
. Jika Anda melihatnyamy-deployment-xxxxxxxxxx-xxxxx
-nmy-namespace
Insufficient permissions: Unable to create Elastic Network Interface.
, konfirmasikan bahwa Anda menambahkan IAM kebijakan ke peran IAM klaster di langkah sebelumnya. -
Jika ada Pods macet dalam
Pending
status, konfirmasikan bahwa jenis instance node Anda terdaftar di limits.godan bahwa produk dari jumlah maksimum antarmuka jaringan cabang yang didukung oleh jenis instance dikalikan kali jumlah node dalam grup node Anda belum terpenuhi. Misalnya, sebuah instans m5.large
mendukung sembilan antarmuka jaringan cabang. Jika grup simpul Anda memiliki lima simpul, maka maksimum 45 antarmuka jaringan cabang dapat dibuat untuk grup simpul. Yang ke-46 Pod yang Anda coba terapkan akan duduk dalamPending
keadaan sampai yang lain Pod yang memiliki grup keamanan terkait dihapus.
Jika Anda menjalankan
kubectl describe pod
dan melihat pesan yang serupa dengan pesan berikut, maka dapat diabaikan dengan aman. Pesan ini mungkin muncul ketika Amazon VPC CNI plugin for Kubernetes mencoba mengatur jaringan host dan gagal saat antarmuka jaringan sedang dibuat. Plugin mencatat peristiwa ini sampai antarmuka jaringan dibuat.my-deployment-xxxxxxxxxx-xxxxx
-nmy-namespace
Failed to create Pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "e24268322e55c8185721f52df6493684f6c2c3bf4fd59c9c121fd4cdc894579f" network for Pod "my-deployment-5df6f7687b-4fbjm": networkPlugin cni failed to set up Pod "my-deployment-5df6f7687b-4fbjm-c89wx_my-namespace" network: add cmd: failed to assign an IP address to container
Anda tidak dapat melebihi jumlah maksimum Pods yang dapat dijalankan pada tipe instance. Untuk daftar jumlah maksimum Pods yang dapat Anda jalankan pada setiap jenis instance, eni-max-podslihat.txt aktif
GitHub. Saat Anda menghapus Pod yang memiliki grup keamanan terkait, atau menghapus simpul yang Pod sedang berjalan, pengontrol VPC sumber daya menghapus antarmuka jaringan cabang. Jika Anda menghapus klaster dengan Pods memakai Pods untuk grup keamanan, maka pengontrol tidak menghapus antarmuka jaringan cabang, jadi Anda harus menghapusnya sendiri. Untuk informasi tentang cara menghapus antarmuka jaringan, lihat Menghapus antarmuka jaringan di Panduan EC2 Pengguna Amazon. -
-
Di terminal terpisah, tempelkan ke salah satu Pods. Untuk sisa topik ini, terminal ini disebut sebagai
TerminalB
. Ganti5df6f7687b
-4fbjm
kubectl exec -it -n my-namespace my-deployment-5df6f7687b-4fbjm -- /bin/bash
-
Dari shell masuk
TerminalB
, konfirmasikan bahwa aplikasi sampel berfungsi.curl my-app
Contoh output adalah sebagai berikut.
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> [...]
Anda menerima output karena semua Pods menjalankan aplikasi dikaitkan dengan grup keamanan yang Anda buat. Grup itu berisi aturan yang memungkinkan semua lalu lintas di antara semua Pods yang terkait dengan kelompok keamanan. DNSlalu lintas diizinkan keluar dari grup keamanan tersebut ke grup keamanan klaster, yang terkait dengan node Anda. Node menjalankan CoreDNS Pods, yang Anda Pods melakukan pencarian nama ke.
-
Dari
TerminalA
, hapus aturan grup keamanan yang memungkinkan DNS komunikasi ke grup keamanan klaster dari grup keamanan Anda. Jika Anda tidak menambahkan DNS aturan ke grup keamanan klaster pada langkah sebelumnya, maka ganti$my_cluster_security_group_id
dengan ID grup keamanan tempat Anda membuat aturan.aws ec2 revoke-security-group-ingress --group-id $my_cluster_security_group_id --security-group-rule-ids $my_tcp_rule_id aws ec2 revoke-security-group-ingress --group-id $my_cluster_security_group_id --security-group-rule-ids $my_udp_rule_id
-
Dari
TerminalB
, coba akses aplikasi lagi.curl my-app
Contoh output adalah sebagai berikut.
curl: (6) Could not resolve host: my-app
Upaya gagal karena Pod tidak lagi dapat mengakses CoreDNS Pods, yang memiliki grup keamanan cluster yang terkait dengannya. Grup keamanan klaster tidak lagi memiliki aturan grup keamanan yang memungkinkan DNS komunikasi dari grup keamanan yang terkait dengan Anda Pod.
Jika Anda mencoba mengakses aplikasi menggunakan alamat IP yang dikembalikan untuk salah satu Pods pada langkah sebelumnya, Anda masih menerima respons karena semua port diizinkan antara Pods yang memiliki grup keamanan yang terkait dengannya dan pencarian nama tidak diperlukan.
-
Setelah selesai bereksperimen, Anda dapat menghapus contoh kebijakan grup keamanan, aplikasi, dan grup keamanan yang Anda buat. Jalankan perintah berikut dari
TerminalA
.kubectl delete namespace my-namespace aws ec2 revoke-security-group-ingress --group-id $my_pod_security_group_id --security-group-rule-ids $my_inbound_self_rule_id wait sleep 45s aws ec2 delete-security-group --group-id $my_pod_security_group_id