Halaman ini menjelaskan cara mengontrol komunikasi traffic keluar antara Pod dan resource di luar cluster Google Kubernetes Engine (GKE) menggunakan nama domain yang sepenuhnya memenuhi syarat (FQDN). Resource kustom yang Anda gunakan untuk mengonfigurasi
FQDN adalah resource FQDNNetworkPolicy
.
Sebelum memulai
Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:
- Aktifkan Google Kubernetes Engine API. Mengaktifkan Google Kubernetes Engine API
- Jika ingin menggunakan Google Cloud CLI untuk tugas ini,
instal lalu
lakukan inisialisasi
gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan
gcloud components update
.
- Ikuti petunjuk untuk Mengaktifkan GKE Enterprise.
Persyaratan dan batasan
Resource FQDNNetworkPolicy
memiliki persyaratan dan batasan berikut:
- Anda harus memiliki cluster GKE yang menjalankan salah satu versi berikut:
- 1.26.4-gke.500 atau yang lebih baru
- 1.27.1-gke.400 atau yang lebih baru
- Cluster Anda harus menggunakan GKE Dataplane V2.
- Anda harus menggunakan salah satu penyedia DNS di cluster GKE, kube-dns, atau Cloud DNS. Deployment kube-dns kustom atau Core DNS tidak didukung.
- Google Cloud CLI versi 462.0.0 atau yang lebih baru.
- Node pool Windows tidak didukung.
- Cloud Service Mesh tidak didukung.
- Jika Anda memiliki alamat IP hard code dalam aplikasi Anda, gunakan
Kolom
IPBlock
KubernetesNetworkPolicy
bukanFQDNNetworkPolicy
. - Hasil yang ditampilkan oleh server nama DNS non-cluster, seperti server nama alternatif
di
resolv.conf
tidak dianggap valid untuk diprogram dalam daftar yang diizinkan pada bidang data GKE. - Jumlah maksimum alamat IP IPv4 dan IPv6 yang dapat diselesaikan
FQDNNetworkPolicy
adalah 50. - Anda tidak dapat mengizinkan traffic ke ClusterIP atau Layanan Headless sebagai traffic keluar
tujuan di
FQDNNetworkPolicy
karena GKE menerjemahkan Alamat IP virtual (VIP) layanan ke alamat IP Pod backend sebelum mengevaluasi aturan kebijakan jaringan. Sebagai gantinya, gunakanNetworkPolicy
berbasis label Kubernetes. - Kuota maksimumnya adalah 100 alamat IP per nama host.
- Enkripsi transparan antar-node tidak didukung dengan Jaringan FQDN Kebijakan.
Mengaktifkan Kebijakan Jaringan FQDN
Anda dapat mengaktifkan Kebijakan Jaringan FQDN pada cluster baru atau lama.
Mengaktifkan Kebijakan Jaringan FQDN di cluster baru
Buat cluster menggunakan flag --enable-fqdn-network-policy
:
gcloud container clusters create CLUSTER_NAME \
--enable-fqdn-network-policy
Ganti CLUSTER_NAME
dengan nama cluster Anda.
Mengaktifkan Kebijakan Jaringan FQDN di cluster lama
Untuk cluster Autopilot dan Standard, update cluster menggunakan flag
--enable-fqdn-network-policy
:gcloud container clusters update CLUSTER_NAME \ --enable-fqdn-network-policy
Ganti
CLUSTER_NAME
dengan nama cluster Anda.Khusus cluster Standard, mulai ulang DaemonSet
anetd
GKE Dataplane V2:kubectl rollout restart ds -n kube-system anetd
Membuat FQDNNetworkPolicy
Simpan manifes berikut sebagai
fqdn-network-policy.yaml
:apiVersion: networking.gke.io/v1alpha1 kind: FQDNNetworkPolicy metadata: name: allow-out-fqdnnp spec: podSelector: matchLabels: app: curl-client egress: - matches: - pattern: "*.yourdomain.com" - name: "www.google.com" ports: - protocol: "TCP" port: 443
Manifes ini memiliki properti berikut:
name: www.google.com
: nama domain yang sepenuhnya memenuhi syarat. Alamat IP yang disediakan oleh server nama yang terkait dengan {i>www.google.com<i} diperbolehkan. Anda harus menentukan salah satu dariname
ataupattern
, atau keduanya.pattern: "*.yourdomain.com"
: Alamat IP yang disediakan oleh server nama cocok dengan pola ini diizinkan. Anda dapat menggunakan ekspresi reguler berikut untuk kunci pola:^([a-zA-Z0-9*]([-a-zA-Z0-9_*]*[a-zA-Z0-9*])*\.?)*$
. Kriteria kecocokan bersifat tambahan. Anda dapat menggunakan beberapa kolompattern
. Anda harus menentukan salah satu dariname
ataupattern
, atau keduanya.protocol: "TCP"
danport: 443
: menentukan protokol dan port. Jika Pod mencoba membuat koneksi ke alamat IP menggunakan kombinasi protokol dan port ini, resolusi namanya akan berfungsi, tetapi bidang data akan memblokir koneksi keluar. Kolom ini bersifat opsional.
Pastikan kebijakan jaringan memilih workload Anda:
kubectl describe fqdnnp
Output-nya mirip dengan berikut ini:
Name: allow-out-fqdnnp Labels: <none> Annotations: <none> API Version: networking.gke.io/v1alpha1 Kind: FQDNNetworkPolicy Metadata: ... Spec: Egress: Matches: Pattern: *.yourdomain.com Name: www.google.com Ports: Port: 443 Protocol: TCP Pod Selector: Match Labels: App: curl-client Events: <none>
Menghapus FQDNNetworkPolicy
Anda dapat menghapus FQDNNetworkPolicy
menggunakan perintah kubectl delete fqdnnp
:
kubectl delete fqdnnp FQDN_POLICY_NAME
Ganti FQDN_POLICY_NAME
dengan nama FQDNNetworkPolicy
Anda.
GKE menghapus aturan dari penegakan kebijakan, tetapi koneksi yang ada akan tetap aktif hingga ditutup dengan mengikuti panduan protokol standar conntrack.
Cara kerja kebijakan jaringan FQDN
FQDNNetworkPolicies
adalah kebijakan khusus traffic keluar yang mengontrol endpoint mana
yang bisa dikirimi traffic oleh Pod yang dipilih. Serupa dengan Kubernetes NetworkPolicy
,
FQDNNetworkPolicy
yang memilih beban kerja membuat aturan penolakan implisit untuk
endpoint tidak ditetapkan sebagai tujuan keluar yang diizinkan. FQDNNetworkPolicies
dapat digunakan dengan Kubernetes NetworkPolicies
seperti yang dijelaskan dalam FQDNNetworkPolicy
dan NetworkPolicy.
FQDNNetworkPolicies
diterapkan pada alamat IP dan tingkat port. Mereka adalah
tidak diterapkan menggunakan informasi protokol Lapisan 7 (mis. Request-URI
dalam
permintaan HTTP). Nama domain yang ditentukan
diterjemahkan ke alamat IP menggunakan
informasi DNS yang disediakan oleh penyedia DNS cluster GKE.
Permintaan DNS
FQDNNetworkPolicy
aktif yang memilih workload tidak memengaruhi kemampuan workload untuk membuat permintaan DNS. Perintah seperti nslookup
atau dig
berfungsi di
domain apa pun tanpa terpengaruh oleh kebijakan. Namun, permintaan berikutnya ke alamat IP yang mendukung domain yang tidak termasuk dalam akun yang diizinkan akan dihapus.
Misalnya, jika FQDNNetworkPolicy
mengizinkan traffic keluar ke www.github.com
, permintaan DNS untuk semua domain akan diizinkan, tetapi traffic yang dikirim ke alamat IP yang mendukung twitter.com
akan dihapus.
Masa berlaku TTL
FQDNNetworkPolicy
mengikuti TTL yang diberikan oleh data DNS. Jika Pod mencoba
menghubungi alamat IP yang habis masa berlakunya setelah TTL data DNS berlalu,
koneksi baru akan ditolak. Koneksi berumur panjang yang durasinya melebihi
TTL data DNS tidak akan mengalami gangguan traffic saat conntrack
menganggap koneksi
masih aktif.
FQDNNetworkPolicy dan NetworkPolicy
Saat FQDNNetworkPolicy
dan NetworkPolicy
diterapkan ke Pod yang sama,
artinya label Pod cocok dengan yang dikonfigurasi di kebijakan, traffic
keluar diizinkan selama cocok dengan salah satu kebijakan singkat ini. Tidak ada
hierarki antara NetworkPolicies
traffic keluar yang menentukan alamat IP atau
pemilih label, dan FQDNNetworkPolicies
.
Endpoint Alamat IP Bersama (Load Balancer, CDN, Gateway VPN, dll.)
Banyak domain tidak memiliki alamat IP khusus
yang mendukungnya dan justru
terekspos menggunakan alamat IP bersama. Hal ini sangat umum terjadi ketika
aplikasi disalurkan oleh Load Balancer atau CDN. Misalnya,
Google Cloud API (compute.googleapis.com
,
container.googleapis.com
, dll.) tidak memiliki alamat IP unik untuk setiap API.
Sebagai gantinya, semua API diekspos menggunakan rentang bersama.
Saat mengonfigurasi FQDNNetworkPolicies
, Anda harus mempertimbangkan apakah
domain yang diizinkan menggunakan
alamat IP khusus atau alamat IP bersama. Karena
FQDNNetworkPolicies
diterapkan di tingkat alamat IP dan port, sehingga tidak dapat
membedakan beberapa domain yang
disajikan oleh alamat IP yang sama. Mengizinkan
akses ke domain yang didukung oleh alamat IP bersama
akan memungkinkan Pod Anda untuk
berkomunikasi dengan semua domain lain
yang dilayani oleh alamat IP tersebut. Misalnya,
mengizinkan traffic ke compute.googleapis.com
juga akan memungkinkan Pod
berkomunikasi dengan Google Cloud API lainnya.
Mencari CNAME
Jika objek FQDN di FQDNNetworkPolicy
menyertakan domain yang memiliki CNAME
dalam data DNS, Anda harus mengonfigurasi FQDNNetworkPolicy
dengan semua domain
yang dapat langsung kueri Pod Anda, termasuk semua alias potensial, di
untuk memastikan perilaku FQDNNetworkPolicy
yang andal.
Jika Pod Anda mengkueri example.com
, maka example.com
adalah yang harus Anda tulis
dalam aturan. Bahkan jika Anda mendapatkan kembali rantai alias dari DNS upstream Anda
server (misalnya example.com
ke example.cdn.com
ke 1.2.3.4
), Jaringan FQDN
Kebijakan akan tetap mengizinkan traffic Anda sampai.
Masalah Umum
Bagian ini mencantumkan semua masalah umum untuk nama domain yang sepenuhnya memenuhi syarat (FQDN).
Menentukan protocol: ALL
akan menyebabkan kebijakan diabaikan
Masalah umum ini telah diperbaiki untuk versi GKE 1.27.10-gke.1055000+ dan 1.28.3-gke.1055000+
Jika Anda membuat FQDNNetworkPolicy
yang menentukan protocol: ALL
di
bagian ports
, GKE tidak akan menerapkan kebijakan tersebut. Masalah ini
terjadi karena ada masalah saat menguraikan kebijakan. Menentukan TCP
atau UDP
tidak menyebabkan masalah ini.
Sebagai solusi, jika Anda tidak menentukan protocol
di entri ports
,
{i>aturan<i} mencocokkan
semua protokol secara {i>default<i}. Menghapus protocol: ALL
akan mengabaikan masalah penguraian dan GKE akan menerapkan FQDNNetworkPolicy
.
Di GKE versi 1.27.10-gke.1055000+ dan 1.28.3-gke.1055000+,
kebijakan terkait protocol: ALL
diuraikan dan diterapkan dengan benar.
Logging NetworkPolicy menyebabkan log yang salah atau hilang
Masalah umum ini telah diperbaiki untuk versi GKE 1.27.10-gke.1055000+ dan 1.28.2-gke.1157000+
Jika cluster Anda menggunakan Kebijakan Jaringan Logging dan kebijakan jaringan FQDN, ada {i>bug<i} yang dapat menyebabkan informasi yang hilang atau entri log.
Saat menggunakan logging kebijakan jaringan tanpa delegasi, kebijakan akan dicatat untuk DNS
koneksi yang meninggalkan beban kerja secara keliru mengklaim bahwa traffic telah diturunkan.
Traffic itu sendiri diizinkan (per FQDNNetworkPolicy
), tetapi log-nya
salah.
Saat menggunakan logging kebijakan jaringan dengan delegasi, log kebijakan akan hilang. Traffic itu sendiri tidak terpengaruh.
Di GKE versi 1.27.10-gke.105500+ dan 1.28.2-gke.1157000+,
{i>bug <i}telah diperbaiki. Koneksi DNS sekarang akan
dicatat dengan benar sebagai DIIZINKAN,
saat traffic dipilih oleh NetworkPolicy
atau FQDNNetworkPolicy
.
Langkah selanjutnya
- Baca dokumentasi Kubernetes tentang kebijakan jaringan
- Gunakan insight keamanan guna menjelajahi cara lain untuk memperkuat infrastruktur Anda