一、背景
由于Pod和Service都是Kubernetes集群范围内的虚拟概念,所以集群外的客户端系统无法通过Pod的IP地址或者Service的虚拟IP地址和虚拟端口号访问它们。为了让外部客户端可以访问这些服务,可将Pod或Service的端口号映射到宿主机,以使客户端应用能够通过物理机访问容器应用。
二、将容器应用的端口号映射到物理机
(1)通过设置容器级别的hostPort,将容器应用的端口号映射到物理机:
apiVersion: v1
kind: Pod
metadata:
name: webapp
labels:
app: webapp
spec:
containers:
- name: webapp
imgae: tomcat
ports:
- containerPort: 8080
hostPort: 8081 #映射到物理机的8081端口
可以通过物理机的IP和8081端口号访问Pod内的容器服务器。
(2) 通过设置Pod级别的hostNetwork=true,该Pod中所有容器的端口号都被直接映射到物理机上。在设置hostNetwork=true时需要注意,在容器的ports定义部分如果不知道hostPort,则默认hostPort等于containerPort,如果指定了hostPort,则hostPort必须等与containerPort的值
apiVersion: v1
kind: Pod
metadata:
name: webapp
labels:
app: webapp
spec:
hostNetwork: true
containers:
- name: webapp
imagePullPolicy: Never