【发布时间】:2018-04-15 06:29:24
【问题描述】:
直到几个月前,我才发现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-node 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 pod 在强制重启后运行成功,但我自己的 Pod 在初始化期间一直卡在“Pending”状态,并出现来自“kubelet NODE_IP”的“Error syncing pod”事件。
我希望能在这个问题上提供一些帮助。提前致谢。
【问题讨论】:
标签: kubernetes ibm-cloud project-calico cni