kubernetes - 无法在Kubernetes集群上更新Calico CNI配置

标签 kubernetes ibm-cloud project-calico cni

直到几个月前,我才发现the "hostPort" configuration for Pods was not going to work with CNI based integrations。这意味着,对于任何使用Calico的Kubernetes集群来说,如果不使用Service或标记hostNetwork=true(这有点极端),就不可能直接在某个Node的端口上直接公开Pod的端口。

从Kubernetes 1.7.0开始,这是可能的,但是有必要更改Calico配置,以使the new "portmap" CNI plugin进入,这是我试图做的,但没有成功。我从一个新的IBM Bluemix Container Service集群开始。

我的calico节点DaemonSet具有以下CNI_NETWORK_CONFIG环境变量:

{
  "name": "k8s-pod-network",
  "cniVersion": "0.3.1",
  "type": "calico",
  "etcd_endpoints": "__ETCD_ENDPOINTS__",
  "etcd_key_file": "__ETCD_KEY_FILE__",
  "etcd_cert_file": "__ETCD_CERT_FILE__",
  "etcd_ca_cert_file": "__ETCD_CA_CERT_FILE__",
  "log_level": "info",
  "mtu": 1480,
  "ipam": {
    "type": "calico-ipam"
  },
  "policy": {
    "type": "k8s",
    "k8s_api_root": "https://__KUBERNETES_SERVICE_HOST__:__KUBERNETES_SERVICE_PORT__",
    "k8s_auth_token": "__SERVICEACCOUNT_TOKEN__"
  },
  "kubernetes": {
    "kubeconfig": "__KUBECONFIG_FILEPATH__"
  }
}

我在这里所做的只是尝试用以下配置替换它:
{
  "name": "k8s-pod-network",
  "cniVersion": "0.3.1",
  "plugins": [{
    "type": "calico",
    "etcd_endpoints": "__ETCD_ENDPOINTS__",
    "etcd_key_file": "__ETCD_KEY_FILE__",
    "etcd_cert_file": "__ETCD_CERT_FILE__",
    "etcd_ca_cert_file": "__ETCD_CA_CERT_FILE__",
    "log_level": "info",
    "mtu": 1480,
    "ipam": {
      "type": "calico-ipam"
    },
    "policy": {
      "type": "k8s",
      "k8s_api_root": "https://__KUBERNETES_SERVICE_HOST__:__KUBERNETES_SERVICE_PORT__",
      "k8s_auth_token": "__SERVICEACCOUNT_TOKEN__"
    },
    "kubernetes": {
      "kubeconfig": "__KUBECONFIG_FILEPATH__"
    }
  },
    {
      "type": "portmap",
      "snat": true,
      "capabilities": {
        "portMappings": true
      }
    }
  ]
}

强制重新启动后,calico-node pods 已成功运行,但是我自己的 pods 在初始化期间始终处于“待定”状态,事件来自“kubelet NODE_IP”事件“错误同步 pods ”。

我希望在此问题上有所帮助。提前致谢。

最佳答案

就内容而言,您看起来很合理,我认为问题可能是您需要将配置文件的名称从.conf结尾更改为.conflist。 PR包含一些WIP更改https://github.com/projectcalico/calico/pull/903,用于在印花布 list 中启用主机端口,您可以将其与已完成的操作进行比较。

如果通过守护程序设置文件名,则应在主机上删除以前的配置文件,因为发布的install-cni容器不会清除以前的配置,并且我不确定kubelet将使用哪个配置文件。

关于kubernetes - 无法在Kubernetes集群上更新Calico CNI配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47080266/

相关文章:

kubernetes - 如何使用导出网络策略允许访问 kubernetes api?

python - 如何在 Bluemix 中使用 D'jango 通过 Python 创建项目和应用程序

node.js - 实时编辑失败并显示 "CLOUD_CONTROLLER_URL is not set in the env"

尝试启动服务时的 etcd 错误被拒绝发送消息

sql-server - 连接到部署在 Kubernetes 中的 SQL Server Docker 容器时,用户 SA 登录失败

ibm-cloud - 如何获取 Watson Text to Speech 服务的用户名和密码?

docker - pod 路由与 IP 不匹配

apache-spark - 为什么 Spark 会失败并显示 "No File System for scheme: local"?

kubernetes - 要求BAN要求的Http 400

Kubernetes:了解资源请求/限制和调度