hostNetwork设置对象为pod,当hostNetwork为true时,pod中的容器直接暴露在宿主机的网络环境中,可以直接通过宿主机的网络访问pod中的应用程序,即PodIp就是Node的IP。该模式下,每一个node只能启动一个同deployment的pod。
apiVersion: v1
kind: Pod
metadata:
name: influxdb
spec:
hostNetwork: true
containers:
- name: influxdb
image: influxdb
我们可以直接通过宿主机的IP+端口来访问这个pod
curl -v 127.0.0.1:8086/ping
hostPort的设置对象是容器,将容器的端口通过hostIP:hostPort的方式暴露出来。
apiVersion: v1
kind: Pod
metadata:
name: influxdb
spec:
containers:
- name: influxdb
image: influxdb
ports:
- containerPort: 8086
hostPort: 8087
那么,通过以下命令也可以访问到influxdb容器
curl -v 127.0.0.1:8087/ping
NodePort的设置对象是service,默认情况下service只能在集群内部通过ClusterIP访问。首先定义pod如下:
apiVersion: v1
kind: Pod
metadata:
name: influxdb
labels:
name: influxdb
spec:
containers:
- name: influxdb
image: influxdb
ports:
- containerPort: 8086
创建NodePort service时,用户可以指定范围为30000-32767的端口,对该端口的访问就能通过 kube-proxy 代理到service后端的pod中。NodePort service的配置如下:
kind: Service
apiVersion: v1
metadata:
name: influxdb
spec:
type: NodePort
ports:
- port: 8086
nodePort: 30000
selector:
name: influxdb
通过下面的命令就可以访问service
curl -v 127.0.0.1:30000/ping
LoadBalancer只能在云服务平台上使用(AWS、Azure等),LoadBalancer类型的service配置如下:
kind: Service
apiVersion: v1
metadata:
name: influxdb
spec:
type: LoadBalancer
ports:
- port: 8086
selector:
name: influxdb
查看一下service信息:
$ kubectl get svc influxdb
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
influxdb 10.97.121.42 10.13.242.236 8086:30051/TCP 39s
我们可以通过外部IP和端口来访问这个service
curl -v 10.13.242.236:8086/ping
Ingress Controller以docker容器的方式部署在k8s的顶部,简单来说就是k8s所使用的负载均衡器,类型有:nginx、envoy、HAProxy 等。