如何强制 Kubernetes 监听特定接口
How to force Kubernetes to listen to specific interface
我的 PC 上有多个网络接口:
lo 127.0.0.1
- 环回接口
enp2s0 192.168.1.244
- 主界面
lo:40 192.168.40.1
- 虚拟环回设备
- 其他无关紧要
我在主接口和第一个环回端口 80
和 443
上都是 运行 apache
我需要那个 apache 不受干扰。
所以我为 kubernetes 创建了一个虚拟环回设备以使用 IP 192.168.40.1
但每次我尝试将它附加到 kubernetes 时,它也会抓取主界面。
到目前为止,这是我的入口控制器配置文件(重要部分):
kind: Service
apiVersion: v1
metadata:
name: traefik
namespace: kube-system
spec:
loadBalancerIP: 192.168.40.1
externalIPs:
- 192.168.40.1
ports:
- name: web
protocol: TCP
port: 1380
targetPort: web
nodePort: 32211
- name: websecure
protocol: TCP
port: 13443
targetPort: websecure
nodePort: 32506
selector:
app.kubernetes.io/instance: traefik
app.kubernetes.io/name: traefik
clusterIP: 10.43.181.90
clusterIPs:
- 10.43.181.90
type: LoadBalancer
sessionAffinity: None
externalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
allocateLoadBalancerNodePorts: true
internalTrafficPolicy: Cluster
我尝试更改 externalIp
和 loadBalancerIP
设置,但这只会让 kubernetes 同时获取 192.168.1.244
和 192.168.40.1
。
出于某种原因,当我尝试编辑文件时,它在仪表板编辑器中显示了一个额外的只读部分:
status:
loadBalancer:
ingress:
- ip: 192.168.1.244
我想这就是控制界面的原因。
如何防止 Kubernetes 抢占主界面,让它只使用 192.168.40.1
?
k3s 默认绑定到第一个 public 系统接口。
要覆盖此行为,您需要向服务器进程提供 --node-ip=<listen-ip>
参数。
由于没有允许设置该参数的配置(无论是内部还是外部),设置它的唯一方法是修改 systemd 服务文件。
您必须修改 /etc/systemd/system/k3s.service
文件并在最后一行更改
ExecStart=/usr/local/bin/k3s \
server \
到
ExecStart=/usr/local/bin/k3s \
server --node-ip=192.168.40.1 \
并通过运行
重启kubernetes
sudo systemctl daemon-reload
sudo systemctl restart k3s.service
这样 Kubernetes 将仅使用分配给此 ip 的接口在 192.168.40.1
上侦听。
我的 PC 上有多个网络接口:
lo 127.0.0.1
- 环回接口enp2s0 192.168.1.244
- 主界面lo:40 192.168.40.1
- 虚拟环回设备- 其他无关紧要
我在主接口和第一个环回端口 80
和 443
上都是 运行 apache
我需要那个 apache 不受干扰。
所以我为 kubernetes 创建了一个虚拟环回设备以使用 IP 192.168.40.1
但每次我尝试将它附加到 kubernetes 时,它也会抓取主界面。
到目前为止,这是我的入口控制器配置文件(重要部分):
kind: Service
apiVersion: v1
metadata:
name: traefik
namespace: kube-system
spec:
loadBalancerIP: 192.168.40.1
externalIPs:
- 192.168.40.1
ports:
- name: web
protocol: TCP
port: 1380
targetPort: web
nodePort: 32211
- name: websecure
protocol: TCP
port: 13443
targetPort: websecure
nodePort: 32506
selector:
app.kubernetes.io/instance: traefik
app.kubernetes.io/name: traefik
clusterIP: 10.43.181.90
clusterIPs:
- 10.43.181.90
type: LoadBalancer
sessionAffinity: None
externalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
allocateLoadBalancerNodePorts: true
internalTrafficPolicy: Cluster
我尝试更改 externalIp
和 loadBalancerIP
设置,但这只会让 kubernetes 同时获取 192.168.1.244
和 192.168.40.1
。
出于某种原因,当我尝试编辑文件时,它在仪表板编辑器中显示了一个额外的只读部分:
status:
loadBalancer:
ingress:
- ip: 192.168.1.244
我想这就是控制界面的原因。
如何防止 Kubernetes 抢占主界面,让它只使用 192.168.40.1
?
k3s 默认绑定到第一个 public 系统接口。
要覆盖此行为,您需要向服务器进程提供 --node-ip=<listen-ip>
参数。
由于没有允许设置该参数的配置(无论是内部还是外部),设置它的唯一方法是修改 systemd 服务文件。
您必须修改 /etc/systemd/system/k3s.service
文件并在最后一行更改
ExecStart=/usr/local/bin/k3s \
server \
到
ExecStart=/usr/local/bin/k3s \
server --node-ip=192.168.40.1 \
并通过运行
重启kubernetessudo systemctl daemon-reload
sudo systemctl restart k3s.service
这样 Kubernetes 将仅使用分配给此 ip 的接口在 192.168.40.1
上侦听。