Calico证书学习笔记

准备工作

安装测试集群

1
2
3
4
curl https://raw.githubusercontent.com/tigera/ccol1/main/control-init.yaml | multipass launch -n control -m 2048M 20.04 --cloud-init -
curl https://raw.githubusercontent.com/tigera/ccol1/main/node1-init.yaml | multipass launch -n node1 20.04 --cloud-init -
curl https://raw.githubusercontent.com/tigera/ccol1/main/node2-init.yaml | multipass launch -n node2 20.04 --cloud-init -
curl https://raw.githubusercontent.com/tigera/ccol1/main/host1-init.yaml | multipass launch -n host1 20.04 --cloud-init -

calico 的四种安装方式

  • Manifest
  • Operator
  • Managed Kubernetes Service(EKS、GKE、AKS)
  • Kubernetes Distro(MicroK8s)

以Operator的方式来安装calico

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
multipass shell host1
kubectl create -f https://docs.projectcalico.org/archive/v3.21/manifests/tigera-operator.yaml
cat <<EOF | kubectl apply -f -
apiVersion: operator.tigera.io/v1
kind: Installation
metadata:
name: default
spec:
calicoNetwork:
containerIPForwarding: Enabled
ipPools:
- cidr: 198.19.16.0/21
natOutgoing: Enabled
encapsulation: None
EOF

安装测试所需的模拟业务

1
2
multipass shell host1
kubectl apply -f https://raw.githubusercontent.com/tigera/ccol1/main/yaobank.yaml

网络策略

原生网络策略

  • 要想 NetworkPolicy 生效,必须使用实现了此的 CNI 插件,如 calico。
  • ingress 进 pod 流量 默认全部打开,当被应用规则后,pod 所在 node 上、ingress 规则列表中允许的流量可以进入 pod;
  • egress 出 pod 流量,默认全部可以出,当被应用规则后,只有规则中允许的流量可以出 pod;
  • 白名单机制,即在 rules 中配置了,才能通行(包括进和出),规则可以叠加,但能做到只要配置了就能通行;

默认配置

  • 命名空间中没有 policy 时,全部开放;

  • 拒绝/允许所有流量

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
    name: default-deny-all
    spec:
    podSelector: {}
    policyTypes:
    - Ingress
    - Egress
    ---
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
    name: allow-all-ingress
    spec:
    podSelector: {}
    ingress:
    - {}
    policyTypes:
    - Ingress
    ---
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
    name: default-deny-egress
    spec:
    podSelector: {}
    policyTypes:
    - Egress
    ---
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
    name: allow-all-egress
    spec:
    podSelector: {}
    egress:
    - {}
    policyTypes:
    - Egress

选择流量的3种方式

  • podSelector
  • namespaceSelector
  • ipBlock

DNS 记录

  • Service
    • shs-8080.tcp.shs-svc.default.svc.cluster.local
    • shs-svc.default.svc.cluster.local
  • Pod
    • 10-244-0-8.default.pod.cluster.local

Calico Network Policy

比原生网络策略的优势

  1. 原生策略为白名单机制,即只有 allow 这一个动作,calico 还有 deny,log 等操作。
  2. 原生策略资源是ns级别的,calico 即支持ns级别、也支持cluster级别。

3 分钟带你搞定 Kubernetes CNI 插件开发

本文介绍 CNI 插件调用的时机、CNI 插件配置的读取,以及 CNI 插件的调用、执行。读完此文,您将清楚 CNI 插件的运行机制、调用细节,并能够自信地写出一个简单的 CNI 插件。CRI:containerdCNI plugin:flannelCNI 的调用时机源码位置:containerd
阅读更多