?K8S暴露pod內(nèi)多個(gè)端口
一、背景
公司統(tǒng)一用的某個(gè)底包跑jar服務(wù),只暴露了8080端口?
二、需求
由于有些服務(wù)在啟動(dòng)jar服務(wù)后,會(huì)啟動(dòng)多個(gè)端口,除了8080端口,還有別的端口需要暴露,我這里就還需要暴露9999端口。
注:解決辦法其實(shí)是可以直接改底包就好了,在底包中多暴露幾個(gè)端口,但是我這邊因?yàn)闊o法改底包,所以只能通過下面的辦法解決。
三、解決辦法
我們平時(shí)在打版升級(jí)的過程中,會(huì)基于底包寫dockerfile來替換最新的jar包得到最終的鏡像,所以可以這個(gè)dockerfile中添加暴露9999端口,這樣同樣也可以增加容器端口暴露,如下
$ cat dockerfile
FROM 10.0.8.56/basis-images/basis:tomcat
ARG jar_name
RUN rm -rf /usr/local/tomcat/*
ADD ./target/${jar_name}.jar /usr/local/tomcat
ADD ./start.sh /usr/local/tomcat
EXPOSE 9999
RUN chmod +x /usr/local/tomcat/start.sh
$ docker build --build-arg jar_name=nsw-ai-video . -t 10.0.8.56/nsyai-test/nsw-ai-video:2023-07-28-15-40
$ docker push 10.0.8.56/nsyai-test/nsw-ai-video:2023-07-28-15-40
四、實(shí)驗(yàn)在docker上跑容器,驗(yàn)證是否暴露出8080和9999端口(10.0.8.56是我的harbor私有鏡像倉庫)
[ yukw @ docker-work01 10.0.8.59 ] ~
$ docker login 10.0.8.56
Username: yukw
Password:
WARNING! Your password will be stored unencrypted in /home/yukw/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
[ yukw @ docker-work01 10.0.8.59 ] ~
$ docker run -d -P --name nsyai-test 10.0.8.56/nsyai-test/nsw-ai-video:2023-07-28-15-40
Unable to find image '10.0.8.56/nsyai-test/nsw-ai-video:2023-07-28-15-40' locally
2023-07-28-15-40: Pulling from nsyai-test/nsw-ai-video
a8c7037c15e9: Pull complete
7f59206c4cb3: Pull complete
d6593d2ee432: Pull complete
47613084598b: Pull complete
7ef22be88035: Pull complete
edf70be6f818: Pull complete
af72e686cb89: Pull complete
376658e1b07e: Pull complete
6991c8295d7f: Pull complete
f0a023d2bec5: Pull complete
9356db0572c6: Pull complete
1cbc500b22f4: Pull complete
2a8383c1d611: Pull complete
962207b93da3: Pull complete
9fdef278ff07: Pull complete
8cc25cf21f3b: Pull complete
Digest: sha256:e07a648e671746f4408565b2237584303cfdfb7d5a451adfa707dda3fc87d670
Status: Downloaded newer image for 10.0.8.56/nsyai-test/nsw-ai-video:2023-07-28-15-40
e11553520d6c4d94c71d8d11a699bd4d1c6df8202d4e1ec15b28ca1bcd21ff25
[ yukw @ docker-work01 10.0.8.59 ] ~
$ docker ps -a |grep 'nsyai-test'
e11553520d6c 10.0.8.56/nsyai-test/nsw-ai-video:2023-07-28-15-40 "/usr/local/tomcat/s…" 8 seconds ago Up 7 seconds 0.0.0.0:49154->8080/tcp, 0.0.0.0:49153->9999/tcp nsyai-test
9fd678ee8eeb 10.0.8.56/nsyai-test/nsyai-web:2023-07-12-12-01 "/docker-entrypoint.…" 2 weeks ago Up 2 weeks 80/tcp my-nsyai-test
[ yukw @ docker-work01 10.0.8.59 ] ~
$ docker port e11553520d6c
8080/tcp -> 0.0.0.0:49154
9999/tcp -> 0.0.0.0:49153
實(shí)驗(yàn)發(fā)現(xiàn),端口暴露成功
容器8080端口隨機(jī)映射到了宿主機(jī)49154端口
容器9999端口隨機(jī)映射到了宿主機(jī)49153端口
五、編寫dp.yaml
# cat dp.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "63"
description: video模塊
labels:
k8s-app: nsw-ai-video
qcloud-app: nsw-ai-video
name: nsw-ai-video
namespace: nsyai-test
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
k8s-app: nsw-ai-video
qcloud-app: nsw-ai-video
template:
metadata:
labels:
k8s-app: nsw-ai-video
qcloud-app: nsw-ai-video
spec:
containers:
- name: nsw-ai-video
image: 10.0.8.56/nsyai-test/nsw-ai-video:2023-07-28-15-40
imagePullPolicy: Always
livenessProbe:
failureThreshold: 5
initialDelaySeconds: 180
periodSeconds: 10
successThreshold: 1
tcpSocket:
port: 8080
timeoutSeconds: 6
readinessProbe:
failureThreshold: 5
initialDelaySeconds: 60
periodSeconds: 10
successThreshold: 1
tcpSocket:
port: 8080
timeoutSeconds: 60
resources:
limits:
cpu: 2000m
memory: 2Gi
requests:
cpu: "1"
memory: 512Mi
ports:
- containerPort: 8080
name: image-port
protocol: TCP
- containerPort: 9999
name: xxl-job-port
protocol: TCP
imagePullSecrets:
- name: nsw-harbor-secret
containerPort是在pod控制器中定義的、pod中的容器需要暴露的端口?
六、編寫svc.yaml
# cat svc.yaml
apiVersion: v1
kind: Service
metadata:
name: nsw-ai-video
namespace: nsyai-test
spec:
externalTrafficPolicy: Cluster
ports:
- name: 8080-8080-tcp
nodePort: 30083
port: 8080
protocol: TCP
targetPort: 8080
- name: 9999-9999-tcp
nodePort: 30084
port: 9999
protocol: TCP
targetPort: 9999
selector:
k8s-app: nsw-ai-video
qcloud-app: nsw-ai-video
type: NodePort
七、應(yīng)用配置清單
# kubectl apply -f dp.yaml
# kubectl apply -f svc.yaml
# kubectl get svc -n nsyai-test
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nsw-ai-gateway ClusterIP 10.0.0.107 <none> 8080/TCP 16d
nsw-ai-video NodePort 10.0.0.119 <none> 8080:30083/TCP,9999:30084/TCP 3h25m
nsyai-pc-nginx NodePort 10.0.0.185 <none> 80:30082/TCP 16d
總結(jié):
1、從上面可以發(fā)現(xiàn),在制作pod鏡像中EXPOSE暴露了兩個(gè)端口,這個(gè)是容器本身需要暴露的端口,在dp.yaml中配置了兩個(gè)containerPort,這個(gè)是pod中的容器需要暴露的端口,在svc.yaml中配置了nodePort,port,targetport,分別代表宿主機(jī)端口,service端口和容器端口。文章來源:http://www.zghlxwxcb.cn/news/detail-621167.html
? 好了,這就是K8S暴露pod內(nèi)多個(gè)端口的辦法了,如有問題可與博主一起交流討論!文章來源地址http://www.zghlxwxcb.cn/news/detail-621167.html
到了這里,關(guān)于K8S暴露pod內(nèi)多個(gè)端口的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!