
, DevOps, - . Kubernetes-, Calico . , k8s, Calico.
Calico â â IP-, , HTTP-, .
Calico GlobalNetworkPolicy. podâ, //podâ, , preDNAT, doNotTrack applyOnForward.
: podâ . Kubernetes NetworkPolicies , api, Calico. GlobalNetworkPolicy. Zero Trust Networking.
Zero Trust Networking
, , , Kubernetes, Calico Zero Trust Networking, .
:
- ( , ).
- endpoint , . , , IP- , , .
- . , , .
- workload (pod/VM/container) .
- Zero Trust Networks . ( ), Zero Trust Networks .
, , : - , , . Policy, , , , .
HostEndpoint, , , , . , , , :
, Felix. Felix â Calico, , , Calico.
Calico
Calico. , , , Calico â , , , Calico , Kubernetes. ( ) .
Felix
â Felix, , , , endpoint . :
- , , .
- FIB (Forwarding Information Base) Linux.
- ACL Linux.
- , Felix etcd.
, (, OpenStack, Kubernetes) Calico . Kubernetes â CNI plugin.
etcd
Calico etcd. etcd â -, Calico. , Kubernetes, Calico etcd.
BGP (BIRD)
Calico BGP , Felix. BGP , , Felix , , .
BGP (BIRD)
, Calico BGP , , (N ^ 2). , BIRD. , , BGP - , BGP-.
Network Policy
NetworkPolicy, Calico ( api projectcalico.org) , , Kubernetes ( api networking.k8s.io).
NetworkPolicy , endpoints, (labels). :
apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
name: allow-tcp-6379
namespace: production
spec:
selector: role == 'database'
types:
- Ingress
- Egress
ingress:
- action: Allow
protocol: TCP
source:
selector: role == 'frontend'
destination:
ports:
- 6379
egress:
- action: Allow
/, role == 'frontend' 6379 .
Host Endpoint
() , Calico. HostEndpoint. (labels) podâ, HostEndpoint, endpoints podâ.
, , 22, 80, 443 . , , HostEndpoint. :
apiVersion: projectcalico.org/v3
kind: HostEndpoint
metadata:
name: node4-ens160
labels:
type: production
role: worker
node: 4
spec:
interfaceName: ens160
node: k8s-s4
expectedIPs:
- 10.213.0.11
ports:
- name: http
port: 80
protocol: TCP
- name: https
port: 443
protocol: TCP
ports, . , (http, https), . interfaceName â IP- expectedIPs. 22 , Felix.
Global Network Policy
, , GlobalNetworkPolicy, , 80/443 HostEndpoint:
kind: GlobalNetworkPolicy
apiVersion: projectcalico.org/v3
metadata:
name: allow-s4
spec:
selector: role==worker
order: 10
applyOnForward: true
types:
- Egress
- Ingress
ingress:
- action: Allow
protocol: TCP
source:
nets:
- 10.213.0.0/24
- action: Allow
protocol: TCP
destination:
ports: [http,https]
- action: Allow
protocol: ICMP
egress:
- action: Allow
, GlobalNetworkPolicy NetworkPolicy . order â , , .
, GlobalNetworkPolicy , , : preDNAT, doNotTrack applyOnForward, .
applyOnForward, preDNAT doNotTrack
, , . Bikram Gupta.
applyOnForward
applyOnForward , , iptabels FORWARD. , , podâ. pod ( ), , PREROUTING â FORWARD â POSTROUTING.
applyOnForward false, GlobalNetworkPolicy workload (/pod/, ) . , . .
applyOnForward true, GlobalNetworkPolicy (forwarded) , :
- ,
HostEndpoint workload. - workload,
HostEndpoint. - ,
HostEndpoint HostEndpoint.
applyOnForward false. , doNotTrack preDNAT, applyOnForward true, , FORWARD.
(FORWARD), - . : HostEndpoint, applyOnForward: true HostEndpoint , . applyOnForward:true, HostEndpoint , , .
: GlobalNetworkPolicy, ICMP HostEndpoint applyOnForward:false. , ping 8.8.8.8 podâ , , forwarded , GNP . . HostEndpoint, applyOnForward:true, , TCP-, ping 8.8.8.8 . applyOnForward:true ( HostEndpoint) .
preDNAT
, DNAT (Destination Network Address Translation) .
, , NodePorts , . , NodePort DNAT (kube-proxy). , , , NodePort, preDNAT true.
:
preDNAT , .- ,
host endpoint, , workload (pod/VM/container). preDNAT . HostEndpoint, preDNAT , â â.
doNotTrack
doNotTrack (conntrack) , , ( pod / VM / container).
conntrack â Linux, , , .
, . , :
- , conntrack ( 128k ).
- . conntrack ( 120). , conntrack 128 , 1100 , , (128k / 120s = 1092 connections/s ).
, , memcached, . Calico , , , doNotTrack. ,
doNotTrack OUTPUT PREROUTING, (, doNotTrack:false), order. doNotTrack order:1, doNotTrack order:1000, doNotTrack. rder .
, , Calico Kubernetes- .
:
: