Belajar Calico - Host Endpoint & Node Security
Episode 14 of 23

Belajar Calico - Host Endpoint & Node Security

Episode ini membahas HostEndpoint: melindungi node Kubernetes itu sendiri, policy untuk traffic ke node, mengunci port manajemen, menerapkan policy ke host VM, dan mengatur koneksi node-to-node.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

Sejauh ini semua policy melindungi pod. Tapi node Kubernetes sendiri — kubelet, API server, SSH, dan port manajemen lain — juga butuh perlindungan. Siapa yang membatasi akses SSH ke node? Di kebanyakan klaster, jawabannya "tidak ada" sampai firewall eksternal turun tangan.

Episode 14 memperkenalkan HostEndpoint: cara Calico melindungi interface host itu sendiri. Dengan ini, keamanan yang kalian bangun untuk pod diperluas ke node, dalam satu model policy yang sama.

HostEndpoint

Apa Itu HostEndpoint

HostEndpoint adalah representasi interface jaringan pada node, lengkap dengan label dan expected IP. Setelah dibuat, semua policy yang menyeleksi label host endpoint berlaku untuk traffic yang masuk atau keluar interface itu. Pola paling sederhana — tandai interface utama semua node:

HostEndpoint untuk semua node
apiVersion: projectcalico.org/v3
kind: HostEndpoint
metadata:
  name: eth0-all-nodes
  labels:
    host-endpoint: eth0
spec:
  node: '*'
  interfaces:
    - eth0
  expectedIPs:
    - 172.18.0.0/16

node: '*' mencocokkan semua node Calico. Endpoint ini menandai interface eth0 sebagai unit keamanan yang bisa diseleksi policy.

Membuat dengan calicoctl

Buat host endpoint
calicoctl apply -f eth0-all-nodes.yaml
calicoctl get hostendpoint -o wide

calicoctl get hostendpoint menampilkan endpoint host beserta node dan interface-nya. Kalau kolomnya kosong, selector node tidak cocok.

Policy untuk Traffic ke Node

Selector Host Endpoint

Policy yang menyasar host endpoint memakai selector pada hostEndpoints (bukan selector untuk workload):

Allow SSH hanya dari office
apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
  name: security-allow-ssh-office
spec:
  tier: security
  order: 100
  selector: host-endpoint == 'eth0'
  types:
    - Ingress
  ingress:
    - action: Allow
      protocol: TCP
      source:
        selector: office-ip == 'true'
      destination:
        ports:
          - 22

Dengan default deny global dari episode 6, policy ini memastikan SSH hanya bisa masuk dari sumber yang ditandai. Traffic lain ke port 22 ditolak.

Menandai Sumber Tepercaya

Sumber "office-ip" cukup didefinisikan sekali sebagai GlobalNetworkSet (episode 6), misalnya calicoctl apply -f office-nets.yaml dengan nets 203.0.113.0/24 dan label office-ip: true. Policy dan set ini bekerja tanpa menyentuh firewall node — semuanya ditangani Felix.

Mengunci Port Manajemen

Daftar Port Kritis

Untuk produksi, port yang wajib dipertimbangkan dikunci: SSH (22), kubelet (10250), API server (6443), node-exporter (9100), dan port Kubernetes lain. Contoh policy untuk traffic masuk API server hanya dari subnet admin:

Kunci API server
apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
  name: security-allow-apiserver-admin
spec:
  tier: security
  order: 110
  selector: host-endpoint == 'eth0'
  types:
    - Ingress
  ingress:
    - action: Allow
      protocol: TCP
      source:
        selector: admin-nets == 'true'
      destination:
        ports:
          - 6443

Uji Sebelum Terkunci Sendiri

Peringatan terpenting di episode ini: policy host endpoint bisa mengunci kalian keluar dari node sendiri. Selalu uji dengan hati-hati dan sediakan jalur pemulihan — misalnya policy break-glass dari subnet jump host dengan order paling kecil. Setelah diterapkan, pastikan kubectl get nodes masih menampilkan node dan kubelet masih terhubung.

Policy ke Host dan Node-to-Node

Traffic Workload ke Node

Kadang workload perlu mengakses node — misalnya untuk metrics. Buat policy yang menyeleksi host endpoint sebagai tujuan:

Allow workload ke node-exporter
apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
  name: platform-allow-node-exporter
spec:
  tier: platform
  selector: host-endpoint == 'eth0'
  types:
    - Ingress
  ingress:
    - action: Allow
      protocol: TCP
      source:
        selector: app == 'prometheus'
      destination:
        ports:
          - 9100

Node-to-Node

Traffic antar node (kubelet ke kubelet, misalnya) perlu diizinkan eksplisit saat node diketatkan:

Allow node-to-node
apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
  name: security-allow-node-to-node
spec:
  tier: security
  order: 90
  selector: host-endpoint == 'eth0'
  types:
    - Ingress
    - Egress
  ingress:
    - action: Allow
      source:
        selector: host-endpoint == 'eth0'
  egress:
    - action: Allow
      destination:
        selector: host-endpoint == 'eth0'

Urutan order: 90 — lebih kecil dari order default deny (100) — membuat traffic node-to-node diizinkan sebelum deny dievaluasi.

Penutup

Episode 14 memperluas keamanan Calico ke node: HostEndpoint sebagai unit keamanan host, policy untuk port manajemen, dan pengaturan traffic workload-ke-node serta node-to-node dalam satu model policy.

Inti yang harus dibawa pulang:

  • HostEndpoint menandai interface node sebagai unit yang bisa dipolicy.
  • Selector hostEndpoints menyeleksi host endpoint, bukan workload.
  • Port manajemen seperti 22 dan 6443 wajib dikunci dengan policy.
  • Policy host endpoint bisa mengunci kalian keluar — siapkan break-glass.
  • Traffic workload-ke-node diatur dengan policy yang menyasar host endpoint.
  • Node-to-node perlu diizinkan eksplisit dengan order sebelum default deny.

Di episode 15 selanjutnya kita membahas encryption dan network security lanjutan — WireGuard untuk enkripsi traffic node-to-node, kombinasi dengan encapsulation, dan penyusunan posture keamanan berlapis yang menggabungkan network, host, dan workload.

Belajar Calico - Host Endpoint & Node Security | Belajar Calico