容器网络:Docker网络模式与Kubernetes网络
容器网络:Docker网络模式与Kubernetes网络
大家好,我是欧阳瑞(Rich Own)。今天想和大家聊聊容器网络这个重要话题。作为一个全栈开发者,理解容器网络是构建分布式系统的关键。今天就来分享一下Docker网络模式和Kubernetes网络的实战经验。
容器网络概述
Docker网络模式
| 模式 | 说明 | 特点 |
|---|---|---|
| bridge | 默认模式,容器间隔离 | 独立网络空间 |
| host | 使用宿主机网络 | 高性能,无隔离 |
| container | 共享其他容器网络 | 容器间共享 |
| none | 无网络 | 完全隔离 |
Kubernetes网络模型
Pod网络 → Pod间通信 Service网络 → 服务发现 Ingress → 外部访问 Network Policy → 网络策略Docker网络配置
创建自定义网络
# 创建bridge网络 docker network create --driver bridge my-network # 创建overlay网络(用于多主机) docker network create --driver overlay --attachable my-overlay # 查看网络 docker network ls # 查看网络详情 docker network inspect my-network容器连接网络
# 运行容器时指定网络 docker run --network my-network --name my-container nginx # 连接已有容器到网络 docker network connect my-network existing-container # 断开容器与网络 docker network disconnect my-network existing-container网络配置示例
# docker-compose.yml version: '3.7' services: web: image: nginx networks: - frontend - backend api: image: node:18 networks: - backend db: image: postgres networks: - backend networks: frontend: driver: bridge backend: driver: bridge internal: trueKubernetes网络
Service配置
apiVersion: v1 kind: Service metadata: name: my-service spec: selector: app: MyApp ports: - protocol: TCP port: 80 targetPort: 9376 type: ClusterIPIngress配置
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress spec: rules: - host: example.com http: paths: - path: / pathType: Prefix backend: service: name: my-service port: number: 80Network Policy
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: deny-all spec: podSelector: {} policyTypes: - Ingress - Egress实战案例:网络调试
Docker网络调试
# 查看容器网络信息 docker inspect my-container # 进入容器检查网络 docker exec -it my-container /bin/bash ping google.com curl http://api-service # 使用busybox测试网络 docker run --rm busybox ping -c 3 google.comKubernetes网络调试
# 检查Pod网络 kubectl exec -it my-pod -- ping api-service # 检查Service kubectl describe service my-service # 检查Ingress kubectl describe ingress my-ingress最佳实践
1. 使用Network Policy
# 只允许特定Pod访问 apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-api spec: podSelector: matchLabels: app: api ingress: - from: - podSelector: matchLabels: app: web2. 使用Service Mesh
# 使用Istio进行流量管理 apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: my-service spec: hosts: - my-service http: - route: - destination: host: my-service subset: v1 weight: 90 - destination: host: my-service subset: v2 weight: 10总结
容器网络是容器化部署的核心。通过理解Docker和Kubernetes网络模型,可以构建高效、安全的网络架构。
我的鬃狮蜥Hash对网络也有自己的理解——它总是能感知周围的环境,这也许就是自然界的"网络通信"吧!
如果你对容器网络有任何问题,欢迎留言交流!我是欧阳瑞,极客之路,永无止境!
技术栈:容器网络 · Docker · Kubernetes
