部署

标准 Cilium Kubernetes 部署的配置包括几个 Kubernetes 资源:

  • DaemonSet 资源:描述部署到每个 Kubernetes 节点的 Cilium pod。这个 pod 运行 cilium-agent 和相关的守护进程。这个 DaemonSet 的配置包括指示 Cilium docker 容器的确切版本(例如 v1.0.0)的镜像标签和传递给 cilium-agent 的命令行选项。
  • 资源:描述传递给 cilium-agentConfigMap 常用配置值,例如 kvstore 端点和凭据、启用/禁用调试模式等。
  • ServiceAccountClusterRoleClusterRoleBindings 资源:当启用 Kubernetes RBAC 时,cilium-agent` 用于访问 Kubernetes API 服务器的身份和权限。
  • 资源:如果 Secret 需要,描述用于访问 etcd kvstore 的凭据。

现有 Pod 的联网

如果在部署 Cilium 之前 pod 已经在运行 DaemonSet,这些 pod 仍将根据 CNI 配置使用以前的网络插件连接。一个典型的例子是默认运行在 kube-system 命名空间中的 kube-dns 服务。

改变这种现有 pod 的网络的一个简单方法是依靠 Kubernetes 在 Deployment 中的 pod 被删除时自动重新启动的事实,所以我们可以简单地删除原来的 kube-dns pod,紧接着启动的替换 pod 将由 Cilium 管理网络。在生产部署中,这个步骤可以作为 kube-dns pod 的滚动更新来执行,以避免 DNS 服务的停机。

$ kubectl --namespace kube-system delete pods -l k8s-app=kube-dns
pod "kube-dns-268032401-t57r2" deleted

运行 kubectl get pods 将显示 Kubernetes 启动了一组新的 kube-dns pod,同时终止了旧的 pod:

$ kubectl --namespace kube-system get pods
NAME                          READY     STATUS        RESTARTS   AGE
cilium-5074s                  1/1       Running       0          58m
kube-addon-manager-minikube   1/1       Running       0          59m
kube-dns-268032401-j0vml      3/3       Running       0          9s
kube-dns-268032401-t57r2      3/3       Terminating   0          57m

默认允许本地主机的入口流量

Kubernetes 具有通过存活探针和就绪探针向用户指示其应用程序当前运行状况的功能。为了让 kubelet 对每个 pod 运行这些健康检查,默认情况下,Cilium 将始终允许从本地主机到每个 pod 的所有入口流量。