Rancher 上操作的k8s容器网络配置总结
要在 Rancher 中配置Spring Boot 应用 ykhd-zhjgyw-xpwfxfjfl
服务,正确的配置方式如下:
1. 应用程序监听端口
在 application.yaml
文件中,配置的应用监听端口是 10001
,并且应用的上下文路径是 /ykhd/api/xpwfxfjfl
。也就是说,Spring Boot 应用在容器内部的 10001
端口上运行,并将所有 API 请求映射到 /ykhd/api/xpwfxfjfl
。
server:
port: 10001
servlet:
context-path: /ykhd/api/xpwfxfjfl
2. Dockerfile 的 EXPOSE
声明
在 Dockerfile
中,尽管 EXPOSE
声明了 31002
端口,**这只是告知 Docker 哪个端口准备接受连接,但并不影响实际应用监听的端口。**因为应用实际监听的端口是 10001
,在 Kubernetes 配置中,我们需要使用 10001
端口作为容器内部的端口,而不需要更改 Dockerfile
。可以多申明几个。
EXPOSE 31002
3. Kubernetes Deployment 配置
在 Deployment
中,需要明确指定容器运行的端口 10001
,即应用程序实际监听的端口。你可以通过 Rancher UI 或者 YAML 配置来定义 containerPort
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: ykhd-zhjgyw-xpwfxfjfl
spec:
replicas: 1
selector:
matchLabels:
app: ykhd-zhjgyw-xpwfxfjfl
template:
metadata:
labels:
app: ykhd-zhjgyw-xpwfxfjfl
spec:
containers:
- name: ykhd-zhjgyw-xpwfxfjfl
image: your-docker-image
ports:
- containerPort: 10001 # 容器内部的实际端口
在 Rancher 的 UI 中,可以直接通过 “容器端口” 设置 10001
端口。容器之间可以通信。
4. Kubernetes Service 配置
为了让其他服务或外部访问到该服务,需要使用 Kubernetes Service
对象。你可以选择 ClusterIP
(只在集群内部访问),或者 NodePort
(通过集群节点暴露外部访问),甚至 LoadBalancer
(通过云提供商的负载均衡器对外暴露)。
- ClusterIP:如果不需要外部访问,仅供集群内部其他服务访问。
- NodePort:用于将服务通过集群节点对外暴露。
- LoadBalancer:如果你有云提供商的负载均衡器,可以对外暴露服务。
apiVersion: v1
kind: Service
metadata:
name: ykhd-zhjgyw-xpwfxfjfl
spec:
type: NodePort # 或者 ClusterIP,取决于访问需求
selector:
app: ykhd-zhjgyw-xpwfxfjfl
ports:
- protocol: TCP
port: 10001 # Kubernetes Service 监听的端口
targetPort: 10001 # 容器内部的应用实际运行端口
nodePort: 31002 # 如果是 NodePort,可以指定外部访问的端口
在 Rancher UI 中,具体操作步骤:
- 选择 ClusterIP 或 NodePort。
- 设置 私有容器端口 为
10001
,这个是实际应用监听的端口。 - 如果是
NodePort
,可以手动设置 NodePort 为31002
,这样外部访问时,可以通过http://<Node_IP>:31002
访问服务。
5. 访问服务
根据需求,以下两种方式可以访问服务:
-
集群内部访问:
如果使用ClusterIP
类型,集群内的其他服务可以通过服务名称和端口10001
访问:http://ykhd-zhjgyw-xpwfxfjfl:10001/ykhd/api/xpwfxfjfl
-
外部访问(使用 NodePort 或 LoadBalancer):
如果你使用NodePort
或LoadBalancer
,可以通过外部的节点 IP 和31002
端口访问:http://<Node_IP>:31002/ykhd/api/xpwfxfjfl
总结:
- Spring Boot 应用监听端口:10001(在
application.yaml
中配置)。 - 容器声明的 EXPOSE 端口:31002(无需修改
Dockerfile
,仅为声明)。 - Kubernetes 部署:在
Deployment
中,确保containerPort
设置为10001
,即应用程序实际监听的端口。 - Kubernetes 服务类型:
- ClusterIP:内部服务访问。
- NodePort:外部通过
31002
访问,映射到应用的10001
端口。 - LoadBalancer:通过负载均衡器暴露外部访问。