Calico Cloud - 出口域网络策略问题
Calico Cloud - Egress domain network policy issue
我正在尝试通过 Calico Cloud
.
使用域配置出口流量
我知道 DNS
功能可以通过付费 Calico Enterprise
或 Calico Cloud
实现,如前所述 here。我正在使用 calico cloud
试用版。我可以使用 destination.nets
访问出口流量,但是当我使用 destination.domains
时,它会阻止整个出口流量。
我的环境:
GKE cluster: 1.20.15-gke.3400
Calico version: Calico Cloud (Already connected cluster, Network Policy created via Calico Cloud UI)
Firewalls: Disabled
对于测试,我使用默认的 nginx
pod 并安装了 ping
。我试过 ping
或 curl
。为了方便起见,我允许任何协议。
使用网络的工作配置:
apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
name: default.allow-google
spec:
tier: default
order: 0
selector: app == "nginx"
namespaceSelector: ''
serviceAccountSelector: ''
egress:
- action: Allow
source: {}
destination:
nets:
- 142.250.185.132/32 ## ip of www.google.com
- 87.248.100.216/32 ## ip of www.yahoo.com
doNotTrack: false
applyOnForward: false
preDNAT: false
types:
- Egress
使用域发布的策略:
apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
name: default.allow-google
spec:
tier: default
order: 0
selector: app == "nginx"
namespaceSelector: ''
serviceAccountSelector: ''
egress:
- action: Allow
source: {}
destination:
domains:
- '*.google.com'
- '*.yahoo.com'
- google.com
- yahoo.com
doNotTrack: false
applyOnForward: false
preDNAT: false
types:
- Egress
问题:
- 我是否缺少一些基本配置?它与层有关(我使用的是默认层和安全层,但结果是一样的)?
- 是否有其他选项允许基于 DNS 的出口策略(打开 source/workarounds)?
提前致谢
我缺少 kube-dns
服务政策。
当您将 GKE
集群连接到 Calico Cloud
时,您没有任何政策。您创建 nets
规则后,它将起作用,因为它仅适用于 IPs
。但是,当您想要使用 FQDN/DNS
时,您需要创建策略以允许连接到 kube-dns
服务。 YAML 如下所示:
apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
name: allow-kube-dns
spec:
selector: all()
egress:
- action: Allow
destination:
services:
name: kube-dns
namespace: kube-system
可以找到更多详细信息 here。
对于故障排除,您可以使用来自 dnsutils
($ apt install dnsutils
).
的 host
($ host www.google.com
) 命令检查是否看到任何输出
应用以上 YAML 后,destination.domains
策略按预期工作。
我正在尝试通过 Calico Cloud
.
我知道 DNS
功能可以通过付费 Calico Enterprise
或 Calico Cloud
实现,如前所述 here。我正在使用 calico cloud
试用版。我可以使用 destination.nets
访问出口流量,但是当我使用 destination.domains
时,它会阻止整个出口流量。
我的环境:
GKE cluster: 1.20.15-gke.3400
Calico version: Calico Cloud (Already connected cluster, Network Policy created via Calico Cloud UI)
Firewalls: Disabled
对于测试,我使用默认的 nginx
pod 并安装了 ping
。我试过 ping
或 curl
。为了方便起见,我允许任何协议。
使用网络的工作配置:
apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
name: default.allow-google
spec:
tier: default
order: 0
selector: app == "nginx"
namespaceSelector: ''
serviceAccountSelector: ''
egress:
- action: Allow
source: {}
destination:
nets:
- 142.250.185.132/32 ## ip of www.google.com
- 87.248.100.216/32 ## ip of www.yahoo.com
doNotTrack: false
applyOnForward: false
preDNAT: false
types:
- Egress
使用域发布的策略:
apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
name: default.allow-google
spec:
tier: default
order: 0
selector: app == "nginx"
namespaceSelector: ''
serviceAccountSelector: ''
egress:
- action: Allow
source: {}
destination:
domains:
- '*.google.com'
- '*.yahoo.com'
- google.com
- yahoo.com
doNotTrack: false
applyOnForward: false
preDNAT: false
types:
- Egress
问题:
- 我是否缺少一些基本配置?它与层有关(我使用的是默认层和安全层,但结果是一样的)?
- 是否有其他选项允许基于 DNS 的出口策略(打开 source/workarounds)?
提前致谢
我缺少 kube-dns
服务政策。
当您将 GKE
集群连接到 Calico Cloud
时,您没有任何政策。您创建 nets
规则后,它将起作用,因为它仅适用于 IPs
。但是,当您想要使用 FQDN/DNS
时,您需要创建策略以允许连接到 kube-dns
服务。 YAML 如下所示:
apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
name: allow-kube-dns
spec:
selector: all()
egress:
- action: Allow
destination:
services:
name: kube-dns
namespace: kube-system
可以找到更多详细信息 here。
对于故障排除,您可以使用来自 dnsutils
($ apt install dnsutils
).
host
($ host www.google.com
) 命令检查是否看到任何输出
应用以上 YAML 后,destination.domains
策略按预期工作。