You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何限制直接访问Docker容器,仅允许通过Kubernetes Pod访问?

限制Docker容器仅允许通过Kubernetes Pod访问的方案

1. 取消Docker容器的主机端口映射

你的容器当前通过-p 8080:8080参数绑定了主机端口,导致本地可直接访问。只需停止现有容器,重新启动时不映射主机8080端口:

# 停止并删除现有容器(替换为你的容器ID/名称)
docker stop <container-id/name>
docker rm <container-id/name>
# 重新启动容器,不映射主机端口
docker run -d --name <your-container-name> <your-image>

此时容器的8080端口仅在Docker内部网络可见,主机无法直接访问,只有K8s Pod能通过Docker内部网络或集群连通的网络访问容器。

2. 将应用迁移至Kubernetes管理(推荐)

直接把应用部署为K8s Deployment和Service,彻底替代单独运行的Docker容器,所有访问统一通过K8s的NodePort(32729)进行:

编写Deployment和Service配置文件

# app-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: your-app
  template:
    metadata:
      labels:
        app: your-app
    spec:
      containers:
      - name: your-app
        image: <your-image-tag>
        ports:
        - containerPort: 8080
---
# app-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: app-service
spec:
  type: NodePort
  selector:
    app: your-app
  ports:
  - port: 8080
    targetPort: 8080
    nodePort: 32729  # 指定你需要的端口

部署到Kubernetes集群

kubectl apply -f app-deployment.yaml
kubectl apply -f app-service.yaml

部署完成后,删除单独运行的Docker容器,即可通过http://localhost:32729/swagger/index.html正常访问,主机无法直接访问原容器的8080端口。

3. 用防火墙规则限制主机8080端口访问

如果必须保留容器的端口映射,可通过主机防火墙仅放行K8s Pod所在IP段的访问:

# 允许K8s Pod网段访问8080端口(替换为你的集群Pod网段,如10.244.0.0/16)
iptables -A INPUT -p tcp --dport 8080 -s 10.244.0.0/16 -j ACCEPT
# 拒绝其他所有对8080端口的请求
iptables -A INPUT -p tcp --dport 8080 -j DROP

这样本地直接访问http://localhost:8080/swagger/index.html会被拦截,仅K8s Pod能通过该端口访问容器。

内容的提问来源于stack exchange,提问作者Shujaat Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 00:35:29