1. nodePort
外部機器可訪問的端口。
比如一個Web應用需要被其他用戶訪問,那么需要配置type=NodePort,而且配置nodePort=30001,那么其他機器就可以通過瀏覽器訪問scheme://nodeIP:30001訪問到該服務,例如http://nodeIP:30001。
通過nodeIP: nodePort可以從外部訪問到某個service。
例如MySQL數據庫可能不需要被外界訪問,只需被內部服務訪問,那么不必設置NodePort
2. Port
port是k8s集群內部訪問service的端口,即通過clusterIP: port可以訪問到某個service
<cluster ip>:port 是提供給集群內部客戶訪問service的入口。
3. targetPort
targetPort是pod的端口,從port和nodePort來的流量經過kube-proxy流入到后端pod的targetPort上,最后進入容器。

舉例:
1.准備鏡像 編輯配置文件,這里使用的是httpd做測試,默認開80端口
[root@tensorflow1 serviceTest]# cat httpd.yaml
# ------------------- Deployment ------------------- #
kind: Deployment
apiVersion: apps/v1beta2
metadata:
labels:
k8s-app: httpd
name: httpd
spec:
replicas: 1
selector:
matchLabels:
k8s-app: httpd
template:
metadata:
labels:
k8s-app: httpd
spec:
containers:
- name: httpd
image: httpd
---
# ------------------- Service ------------------- #
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: httpd
name: httpd
spec:
type: NodePort
ports:
- port: 8081
targetPort: 80
nodePort: 30001
selector:
k8s-app: httpd
2.啟動
[root@tensorflow1 serviceTest]# kubectl create -f httpd.yaml
3.查看啟動情況
[root@tensorflow1 serviceTest]# kubectl get all -o wide --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE
default po/httpd-68f9d7648d-tv9xv 1/1 Running 0 26m 10.244.1.10 tensorflow2
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
default svc/httpd NodePort 10.100.205.181 <none> 8081:30001/TCP 35m k8s-app=httpd
[root@tensorflow1 serviceTest]# kubectl describe svc/httpd
Name: httpd
Namespace: default
Labels: k8s-app=httpd
Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"k8s-app":"httpd"},"name":"httpd","namespace":"default"},"spec":{"ports":[{"...
Selector: k8s-app=httpd
Type: NodePort
IP: 10.100.205.181
Port: <unset> 8081/TCP
TargetPort: 80/TCP
NodePort: <unset> 30001/TCP
Endpoints: 10.244.1.10:80
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
4.訪問
直接訪問pod ip:TargetPort (即Endpoints) 10.244.1.10:80 ,生命周期短,一般不用
[root@tensorflow1 serviceTest]# curl "10.244.1.10:80"
<html><body><h1>It works!</h1></body></html>
訪問service的clusterIP:port,集群內訪問,集群外無法不能訪問
[root@tensorflow1 serviceTest]# curl "10.100.205.181:8081"
<html><body><h1>It works!</h1></body></html>
訪問service的MasterNode:nodePort,這里masterNode指的是任意一台k8s集群內物理機,在所有物理機上開端口,主要是為了給集群外機器訪問的,如果不需要則不用配置。
[root@tensorflow1 serviceTest]# curl "192.168.1.139:30001"
<html><body><h1>It works!</h1></body></html>
