- 如下
apiVersion: v1
kind: Service
metadata:
name: elasticsearch
labels:
app: elasticsearch
spec:
selector:
app: elasticsearch
ports:
- name: http
protocol: TCP
port: 9200
targetPort: 9200
nodePort: 9200
-
上面的配置文件出现了三个port
- 1、
port
- 2、
targetPort
- 3、
nodePort
- 1、
-
这其实就是套娃,套了又套;虚拟化里面有套了虚拟化;彼此资源都是隔离的,独立的概念
-
targetPort
:最里面的一层,就是可以理解为容器内的服务启动的端口号 -
port
:将容器内的端口号映射到容器外(命名空间)的端口号;该端口号只在指定的命名空间生效,其他命名空间和宿主机都是无效的,隔离的;这是从里到外的第二层 -
nodePort
:宿主机的端口号;这个端口号是真正宿主机能够通的端口号,也是可以通过IP地址或者域名进行外部访问的端口号;但是这里的端口号和正常拉起程序会占用一个端口号概念还不大一样;
比如这里用9200,那么在整个K8s服务拉起来的时候,配置文件中就得暴露此端口号;相当于k8s拉起时,事先分配占用这个宿主机资源(通过宿主机查看端口占用也能看到,是被霸占了),通常建议的都是30000号以上;
所以该9200就相当于找K8s拿一个它启动时已经从宿主机分配到的端口资源,该资源且未被分配过才行
网友评论