容器的5种网络模式和 K8S pod使用的容器网络模式

文档说明:只记录关键地方; 发文时间: 2022-10-23

理解了容器网络模式,也就知道了如何把多个容器相互连接起来

容器的网络模式:

  1. network_mode: "bridge"
  2. network_mode: "host"
  3. network_mode: "none"
  4. network_mode: "service:[service name]"
  5. network_mode: "container:[container name/id]"

· host模式,使用--net=host指定。
· container模式,使用--net=container:NAME_or_ID指定。
· none模式,使用--net=none指定。
· bridge模式,使用--net=bridge指定,默认设置。(也可以自定义桥接模式,比如openvswitch)

docker network https://docs.docker.com/network/

来个例子 (network_mode: "service:[service name]" 模式的例子)

共享容器网络

容器之间可以直接使用 127.0.0.1 或者 localhost 连接

version: "3"
services:
    pause:
        #    image: gcr.io/google-containers/pause-amd64:3.1
        image: alpine:latest
        restart: always
        container_name: pause
        command: [ 'tail', '-f','/dev/null' ]
        ports:
            - "80:80"
            - "443:443"
    nginx:
        image: nginx:alpine
        network_mode: 'service:pause'
        depends_on:
            - pause
    php-fpm:
        image: php:7.4-fpm-alpine
        depends_on:
            - pause
        network_mode: 'service:pause'

docker-compose 容器服务之间互访 配置(常用)

方式 1: extra_hosts 容器名称 (也就是自定义域名映射)

原理: 添加主机名的标签,就是往/etc/hosts文件中添加一些记录 ; 在K8S 环境中,使用 hostAliases 参数设置,

    extra_hosts:
       - "my-app-service:192.168.3.205"

方式 2: depends_on 容器启动顺序

  depends_on:
      - mysql
      - nginx
  links:
      - mongodb
      - nginx

K8S POD 的网络模式

POD 使用的网络模式其实是 5. network_mode: "container:[container name/id]"

同一个 pod 内的各容器共享一个网络,因此可以使用127.0.0.1 或者 localhost 容器之间互访

默认 POD 由k8s.gcr.io/pause守护容器提供网络,因此你看到pod里的所有容器都可以使用127.0.0.1或者localhost 连接

参考文档

  1. Docker network
  2. 一分钟看懂Docker的网络模式和跨主机通信
  3. 一文理解Docker的网络模式
  4. k8s pod网络模式中 pause 容器作用
  5. nginx容器与php-fpm容器连接方式 (常用的是这种网络链接模式- 桥接)
  6. 容器设置代理
posted @ 2022-10-23 13:27  jingjingxyk  阅读(1013)  评论(0编辑  收藏  举报