为什么 k8s 暴露的外网 IP 实际都是内网 IP
按照这个教程:minikube 启动一个 nginx 服务 ,跑了一遍 Nginx
在 k8s
下的用法,但是发现一个问题,就是暴露的外网 IP 实际都是内网 IP。
先这样:
kubectl create deployment hello-nginx --image=nginx:latest
再这样:
kubectl expose deployment hello-nginx --type=NodePort --port=80 --target-port=80
最后这样:
─➤ minikube service hello-nginx 1 ↵|-----------|-------------|-------------|---------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|-----------|-------------|-------------|---------------------------|
| default | hello-nginx | 80 | http://192.168.49.2:30433 |
|-----------|-------------|-------------|---------------------------|
? 正通过默认浏览器打开服务 default/hello-nginx...
可以看到显示的 URL 是 http://192.168.49.2:30433
。
但是我的路由器给我的 ip
地址是 192.168.31.245
, 这样我就不能从其他电脑访问这个 nginx
了,比如通过同一个 wifi
网络下的 192.168.31.203
就访问不了这个 Nginx
服务,怎么办?我应该怎么做?
- 这个 br-846ee7341a53 是什么?是 docker 干的,还是 k8s 干的?
- 如果让
192.168.31.203
可以访问到这个 Nginx 服务?
─➤ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp34s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 2c:f0:5d:9a:c8:03 brd ff:ff:ff:ff:ff:ff
inet 192.168.31.245/24 brd 192.168.31.255 scope global dynamic noprefixroute enp34s0
valid_lft 30463sec preferred_lft 30463sec
inet6 fe80::a0d2:77cd:73b7:b35a/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: wlo1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 44:af:28:ca:f3:91 brd ff:ff:ff:ff:ff:ff
altname wlp33s0
4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:30:0b:8c:9f brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:30ff:fe0b:8c9f/64 scope link
valid_lft forever preferred_lft forever
5: br-57c0fdbc9edd: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:89:12:80:38 brd ff:ff:ff:ff:ff:ff
inet 172.19.0.1/16 brd 172.19.255.255 scope global br-57c0fdbc9edd
valid_lft forever preferred_lft forever
inet6 fe80::42:89ff:fe12:8038/64 scope link
valid_lft forever preferred_lft forever
7: br-fe111ffb5f40: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:a5:78:57:1a brd ff:ff:ff:ff:ff:ff
inet 172.18.0.1/16 brd 172.18.255.255 scope global br-fe111ffb5f40
valid_lft forever preferred_lft forever
10: vboxnet0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 0a:00:27:00:00:00 brd ff:ff:ff:ff:ff:ff
16: veth39ef1e2@if15: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether 1a:df:76:70:19:c2 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet6 fe80::18df:76ff:fe70:19c2/64 scope link
valid_lft forever preferred_lft forever
171: br-846ee7341a53: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:76:2f:7b:6b brd ff:ff:ff:ff:ff:ff
inet 192.168.49.1/24 brd 192.168.49.255 scope global br-846ee7341a53
valid_lft forever preferred_lft forever
inet6 fe80::42:76ff:fe2f:7b6b/64 scope link
valid_lft forever preferred_lft forever
177: veth7044566@if176: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-846ee7341a53 state UP group default
link/ether d6:a3:29:0a:50:ce brd ff:ff:ff:ff:ff:ff link-netnsid 1
inet6 fe80::d4a3:29ff:fe0a:50ce/64 scope link
valid_lft forever preferred_lft forever
回答:
下面说得都不一定对,因为我也是才学过一点k8s,就当是讨论讨论。。。
- 这个br-xxx1a53 是一个桥接的接口(虚拟的网卡),用用来连接本机和docker容器网络的。主要是docker在控制这个桥接接口。
docker在创建网络的时候会生成这个br接口
其实使用—type=NodePort这个参数就已经是让k8s容器的端口和节点做绑定了。
现在这里问题就出在minikube上,minikube的节点都在一个docker容器里面,所以对于minikube里面的k8s来说,它的node节点的ip就是所在容器的ip。
所以使用—type=NodePort的时候,minikube把端口绑定在docker容器的IP上了。
如果你不用minikube测试,就自己搭建几个正常的节点,再使用—type=NodePort参数,就能通过node的本机ip访问服务了。
以上是 为什么 k8s 暴露的外网 IP 实际都是内网 IP 的全部内容, 来源链接: utcz.com/p/944286.html