k8s 中pod NordPort 的理解- 可以改变service web 的port- 只要对应相关的pod 的app 就可以了
1:通过pod 来创建service: pod_nginx.yamlpod_nginx.ymlapiVersion: v1kind: Podmetadata:name: nginx-podlabels:app: nginxspec:containers:- name: nginx-containerimage: nginxp...
1:通过pod 来创建service: pod_nginx.yaml
pod_nginx.yml
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx-container
image: nginx
ports:
- name: nginx-port
containerPort: 8
来创建 pod:
kubectl create -f pod_nginx.yml
kubectl get pods
[root@k8s-master script]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-pod 1/1 Running 0 18m
发现pod 已经创建好了,但是 service 还没有好:
[root@k8s-master script]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.1.0.1 <none> 443/TCP 2d
原来是这个pod 还没有暴露,下面暴露一下:
[root@k8s-master script]# kubectl expose pods nginx-pod
[root@k8s-master script]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.1.0.1 <none> 443/TCP 2d
nginx-pod ClusterIP 10.1.95.106 <none> 80/TCP 4s
这个时候,外面还是不能访问的,需要再expose type=NodePort 才可以:
root@k8s-master script]# kubectl expose pods nginx-pod --type=NodePort
Error from server (AlreadyExists): services "nginx-pod" already exists
上面报错,因为service : nignx 已经存在了。
删掉重建:
[root@k8s-master script]# kubectl delete service nginx-pod
service "nginx-pod" deleted
[root@k8s-master script]# kubectl expose pods nginx-pod --type=NodePort
service/nginx-pod exposed
[root@k8s-master script]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.1.0.1 <none> 443/TCP 2d
nginx-pod NodePort 10.1.236.69 <none> 80:30582/TCP 7s
再次访问就可以了: http://hostname_IP:20582 就可以了。
如果要指定访问port, 可以通过下面建立service 来实现:
----------------------
2: 创建service 文件:
service_nginx.yaml:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
ports:
- port: 31888
nodePort: 31888
targetPort: nginx-port
protocol: TCP
selector:
app: nginx # 注意, 这个app 一定要对应好相应的pod,具体可以用:kubectl get pod --show-labels 来看:
type: NodePort
kubectl create -f service_nginx.yaml
service/nginx-service created
[root@k8s-master script]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.1.0.1 <none> 443/TCP 2d1h
nginx-pod NodePort 10.1.236.69 <none> 80:30582/TCP 42m
nginx-service NodePort 10.1.236.183 <none> 31888:31888/TCP 28s
可以看一下: pod 后面的lable, 来准确关联app:
[root@k8s-master script]# kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
emptydir-test 2/2 Running 85 44h <none>
nginx-86c57db685-86fjw 1/1 Running 5 47h app=nginx,pod-template-hash=86c57db685
nginx-pod 1/1 Running 0 55m app=nginx
由上面可以看出,对外发布service 的端口可以通过两种方法来实现,一种是创建pod, 还有一种方便的方法就是:创建service, 可以指定port, 关键是app 要对应相应的pod, 这个可以通过kubectl get pod --show-labels 来看。
更多推荐
所有评论(0)