在部署服務之前,先弄懂一些名詞定義,對於理解文件中的描述很有幫助。
在問題排查時,除了從 log 之外,也蠻常需要在網路傳遞上著墨,畢竟出問題的時候,若不是資源不足,那有很高的機率是傳遞上出了問題。
Pod IP
oc get pod <pod_name> -o wide
NAME IP NODE
mypod 10.128.54.87 worker-1
誰可持有? Pod。
誰看得到? 同一座叢集中的 Pod。
Pod 可以跨不同 namespace 和別的 Pod 溝通。
Service IP (Cluster IP)
curl http://my-service:8080
oc get svc my-service
NAME CLUSTER-IP PORT(S)
my-service 172.30.94.87 8080/TCP
誰可持有? Service。
誰看得到? 同一 namespace 的 Pod。 / 同一座叢集中的 Pod。相同 namespace 的 Pod 可直接訪問:
http://my-service
不同 namespace 的 Pod 要透過完整 DNS 存取:http://<service-name>.<namespace>.svc.cluster.local
跨 namespace 的連線,需要透過 Kubernetes 中內建 DNS(如 CoreDNS)進行域名解析
名稱格式 | 說明 |
---|---|
my-svc |
同 namespace 使用 |
my-svc.my-namespace |
不同 namespace 使用 |
my-svc.my-namespace.svc |
更完整 |
my-svc.my-namespace.svc.cluster.local |
完整 FQDN(fully qualified domain name) |
* 不過有例外 (不能訪問)
1. 有設定 NetworkPolicy 限制跨 namespace 流量
2. Service 沒有 selector(headless)
3. Service port 沒有打開或錯誤
Node IP
NodePort 類型的 Service
/ Debug 時需要知道(SSH、檢查網路)oc get nodes -o wide
NAME INTERNAL-IP EXTERNAL-IP
worker-1 192.168.1.101 <none>
誰可持有? 各個節點 / Master Node / Worker Node
誰看得到? 在允許的情況下...Pod 可以直接和節點溝通。
External IP
External IP
做為出口。 比較常見的是,使用了多個 Pod 處理了請求後,要讓請求者看起來,都是從特定 IP 丟回來的這樣的目的。apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: ClusterIP
selector:
app: myapp
externalIPs:
- 203.0.113.50
ports:
- port: 80
targetPort: 8080
LoadBalancer IP
kubectl get svc my-service
NAME TYPE EXTERNAL-IP PORT(S)
my-service LoadBalancer 35.201.45.22 80:32112/TCP
Ingress / Route IP
*.apps.cluster.com
之類的網域轉發。kubectl get ingress my-ingress
NAME HOSTS ADDRESS PORTS
my-ingress myapp.example.com 34.123.45.6 80
oc get route myapp
NAME HOST/PORT SERVICE
myapp myapp.apps.cluster.local my-service
對應到某個 Node 或 Router IP。
Public IP
nslookup myapp.apps.cluster.local
類型 | Kubernetes(K8s) | OpenShift(OCP) |
---|---|---|
Pod IP | 每個 Pod 有獨立 IP(從 CNI 插件來) | 同 K8s,但 OCP 預設用 OVN-Kubernetes |
Service IP (ClusterIP) | 虛擬 IP(僅叢集內部存取) | 同樣透過 kube-proxy 處理 |
Node IP | 實體或 VM 的 IP(內網或外網) | 一樣,不變 |
External IP | 需手動設定或由雲平台分配 | 多由 node/external 設定,但不推薦 |
LoadBalancer IP | 依賴雲平台 LB,如 AWS ELB | OCP 需搭配 MetalLB 或 cloud provider |
Ingress/Route IP | 使用 Ingress Controller 公開入口 IP | 使用 Route,由 OCP Router 處理公開入口 |
Public IP | 不內建(需依平台設定) | 可搭配 Route 自動綁定外部域名 |