Параметр hostNetwork:true не раскрывает интерфейсы хоста.
У меня есть очень простая программа:
package main
import (
"fmt"
"github.com/vishvananda/netlink"
)
func main() {
_, err := netlink.LinkByName("wlp164s0")
if err != nil {
fmt.Println("error finding VIP Interface, for building DHCP Link : %v", err)
return
}
fmt.Println("Worked..")
}
Если я создаю образ докера и запускаю его с помощью «--net host», эта программа печатает «Работает». Умеет находить интерфейс wlp164s0.
Если я создам развертывание k8s следующим образом:
apiVersion: apps/v1
kind: Deployment
metadata:
name: netlink-example
labels:
app: netlink-example
spec:
replicas: 1
selector:
matchLabels:
app: netlink-example
template:
metadata:
labels:
app: netlink-example
spec:
hostNetwork: true
containers:
- name: netlink
image: suruti94/netlink:0.1
imagePullPolicy: IfNotPresent
hostNetwork: true
nodeSelector:
kubernetes.io/os: linux
Эта программа печатает ошибку, указывающую, что она не может найти интерфейс, что означает, что «hostNetwork: true» не действует. Из всех моих исследований это выглядит правильно. Любая помощь будет оценена по достоинству. Я запускаю эту программу на Ubuntu 21.04, k8s версии 1.22.
1 ответ
После некоторых экспериментов я пришел к пониманию, что опция докера «--net host» не совпадает с «hostNetwork: true» в k8s. Я ошибочно предположил, что они производят подобное поведение.
- Опция docker --net host делает хост-интерфейсы доступными в контейнере, что полезно для некоторых приложений.
- Когда вы развертываете модуль с параметром hostNetwork:true, это означает, что хост-сеть доступна из модуля. По умолчанию, когда модуль развернут (я проверил это на своем локальном компьютере с помощью Kind), хост-сеть доступна. Я вижу интерфейс veth, подключенный к мосту на хосте. Даже с hostNetwork: false я смог обновить пакеты в своем модуле. Так что не знаю, что делать с этой настройкой. На данном этапе я прихожу к выводу, что нет возможности отображать интерфейс хоста непосредственно в модуле.