Open aibangjuxin opened 2 weeks ago
根据你的配置,需要确保 GKE 节点之间可以通过端口 8443 进行通信。以下是实现这个目标的详细步骤,包括网络策略和防火墙规则的配置。
首先,确保所有的 Pods 能够在端口 8443 上进行通信。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-node-communication
namespace: your-namespace
spec:
podSelector:
matchLabels:
app: my-app
policyTypes:
- Ingress
- Egress
ingress:
- from:
- ipBlock:
cidr: 10.0.0.0/8 # 这里假设你的 GKE 集群的节点 IP 范围是 10.0.0.0/8,根据实际情况调整
ports:
- protocol: TCP
port: 8443
egress:
- to:
- ipBlock:
cidr: 10.0.0.0/8
ports:
- protocol: TCP
port: 8443
GKE 防火墙规则需要允许节点之间的流量通过 8443 端口。可以使用以下命令创建或更新防火墙规则:
gcloud compute firewall-rules create allow-internal-8443 \
--network default \
--allow tcp:8443 \
--source-ranges 10.0.0.0/8 \
--target-tags gke-node
以下是完整的 Network Policy 配置,确保 GKE 节点之间可以通过 8443 端口进行通信:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-node-communication
namespace: your-namespace
spec:
podSelector:
matchLabels:
app: my-app
policyTypes:
- Ingress
- Egress
ingress:
- from:
- ipBlock:
cidr: 10.0.0.0/8
ports:
- protocol: TCP
port: 8443
egress:
- to:
- ipBlock:
cidr: 10.0.0.0/8
ports:
- protocol: TCP
port: 8443
下面的流程图展示了网络流量的路径和防火墙规则的应用:
flowchart TD
subgraph Namespace
A[Pod]
end
LB[Load Balancer]
FW[Firewall Rule: allow-internal-8443]
NP[Network Policy: allow-node-communication]
LB -- TCP 443 --> A
A -- TCP 8443 --> FW
FW -- TCP 8443 --> NP
NP -- TCP 8443 --> A
通过以上步骤,你可以确保 GKE 节点之间能够通过 8443 端口进行通信,从而支持你的 Service 配置。请根据你的实际情况调整 IP 范围和其他细节。
要逐步放开 GKE 中的 Network Policy 防火墙以允许通过 Load Balancer IP 的通信,你需要进行以下几个步骤:
创建允许 Ingress 的 Network Policy:
创建允许 Egress 的 Network Policy:
检查和更新防火墙规则:
具体步骤
允许 Ingress 流量: 下面的 Network Policy 允许 Load Balancer IP 访问指定命名空间中的 Pods。
允许 Egress 流量(如果需要): 下面的 Network Policy 允许 Pods 访问外部流量。
更新 GKE 防火墙规则: 确保 GKE 防火墙允许从 Load Balancer IP 到 GKE 节点的流量。
需要注意的细节
命名空间隔离:
namespaceSelector
和podSelector
。Service 和 Pod 的端口设置:
targetPort
和 Pod 上暴露的端口一致。防火墙规则和网络策略的顺序:
Mermaid 流程图
通过以上步骤和注意事项,可以逐步放开 Network Policy 防火墙,确保 Load Balancer IP 的通信被允许。