kubernetes集群上运行的pod,在集群内访问是很容易的,最简单的,可以通过pod的ip来访问,也可以通过对应的svc来访问,但在集群外,由于kubernetes集群的pod ip地址是内部网络地址,因此从集群外是访问不到的。
为了解决这个问题,kubernetes提供了如下几个方法。
hostNetwork
hostPort
service NodePort
hostNetwork: true
hostNetwork为true时,容器将使用宿主机node的网络,因此,只要知道容器在哪个node上运行,从集群外以 node-ip + port 的方式就可以访问容器的服务。
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
hostNetwork:truecontainers:-name: nginx
image: nginx
pod启动后,如下,可以看到pod的ip地址与node节点的地址是一致的
[root@localhost ~]# kubectl get pods -o wide nginx
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
nginx1/1 Running 0 8m2s 192.168.10.10 minikube [root@localhost~]# kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CON