Я обнаружил, что еще несколько месяцев назад конфигурация hostPort для модулей не работала. с интеграцией на основе CNI. Это означало, что для любого кластера Kubernetes, использующего Calico, было невозможно напрямую открыть порт пода непосредственно на порте определенного узла, без использования службы или отметки hostNetwork=true
(что немного экстремально).
Начиная с Kubernetes 1.7.0 это возможно, но необходимо изменить конфигурацию Calico, чтобы позволить новый подключаемый модуль CNI "portmap", что я и пытаюсь сделать, но безуспешно. Я начинаю с нового кластера IBM Bluemix Container Service.
Мой ситцевый узел 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" во время инициализации из-за события "Error syncing pod" от "kubelet NODE_IP".
Буду признателен за помощь в этом вопросе. Заранее спасибо.