透過GCP Cloud NAT固定GKE Pod存取外網的ip
2024/02/20
Cloud NAT
GCP的Cloud NAT服務提供NAT服務(網路位址轉譯)
可以讓VM或k8s Pod在不公開ip的情況下訪問internet
並且都是透過同public ip訪問
這樣可達到
1. 避免VM or Pod暴露ip
2. 使用限制僅固定ip能存取的一些第三方服務
GKE Cluster設定
首先建立GKE cluster的時候
必須選擇private cluster類型
這點很重要如果沒設定成private cluster的話
訪問internet的時候將不是透過NAT的固定ip
建立固定IP
在GCP console的VPC > IP Address頁面
先建立一個固定IP準備後續給NAT服務使用
Cloud NAT設定
基本設定
首先需要建立一個Cloud router
基本上設定一個名稱然後其他設定用預設值就可以了
然後設定好Network、Region、Router即可
NAT Mapping
Source endpoint type設定為VM Instance
Cloud NAT IP Address設定為手動
並選擇前面建立的固定IP
驗證傳出Pod的IP
建立一個alpine的deployment並安裝curl
apiVersion: apps/v1
kind: Deployment
metadata:
name: alpine-curl
labels:
app: alpine-curl
spec:
replicas: 1
selector:
matchLabels:
app: alpine-curl
minReadySeconds: 5
template:
metadata:
labels:
app: alpine-curl
spec:
containers:
- name: alpine-curl
image: alpine:latest
imagePullPolicy: Always
command:
- /bin/sh
- -c
- |
apk update
apk add curl
tail -f /dev/null
resources:
limits:
cpu: 1
memory: 2Gi
requests:
cpu: 500m
memory: 1Gi
在Container內發出curl請求
透過httpbin.org/ip來驗證Pod傳出的IP是不是跟NAT使用的IP相同