hostPort相当于docker run -p 8081:8080,不用创建svc,因此端口只在容器运行的vm上监听

缺点: 没法多pod负载

$ cat pod-hostport.yaml

apiVersion: v1

kind: Pod

metadata:

name: webapp

labels:

app: webapp

spec:

containers:

- name: webapp

image: tomcat

ports:

- containerPort: 8080

hostPort: 8081

$ kubectl get po --all-namespaces -o wide --show-labels

NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE LABELS

default webapp 1/1 Running 0 5s 10.2.100.3 n2.ma.com app=webapp

[root@n2 ~]# docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

59e72c92ba55 tomcat "catalina.sh run" 2 minutes ago Up 2 minutes k8s_webapp_webapp_default_932c613e-e2dc-11e7-8313-00505636c956_0

0fe8c2f08e03 gcr.io/google_containers/pause-amd64:3.0 "/pause" 2 minutes ago Up 2 minutes 0.0.0.0:8081->8080/tcp k8s_POD_webapp_default_932c613e-e2dc-11e7-8313-00505636c956_0

hostNetwork相当于 docker run --net=host ,不用创建svc,因此端口只在容器运行的vm上监听

缺点: 没法多pod负载

apiVersion: v1

kind: Pod

metadata:

name: webapp

labels:

app: webapp

spec:

hostNetwork: true

containers:

- name: webapp

image: tomcat

ports:

- containerPort: 8080

$ kubectl get po --all-namespaces -o wide --show-labels

NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE LABELS

default webapp 1/1 Running 0 36s 192.168.x.x n2.ma.com app=webapp

查看该pod的网卡, 发现和宿主机一致

$ docker exec -it b8a1e1e35c3e ip ad

1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: eth0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

link/ether 00:50:56:33:13:b6 brd ff:ff:ff:ff:ff:ff

inet 192.168.14.133/24 brd 192.168.14.255 scope global dynamic eth0

valid_lft 5356021sec preferred_lft 5356021sec

inet6 fe80::250:56ff:fe33:13b6/64 scope link

valid_lft forever preferred_lft forever

3: docker0: mtu 1450 qdisc noqueue state UP group default

link/ether 02:42:41:e8:f5:22 brd ff:ff:ff:ff:ff:ff

inet 10.2.100.1/24 scope global docker0

valid_lft forever preferred_lft forever

inet6 fe80::42:41ff:fee8:f522/64 scope link

valid_lft forever preferred_lft forever

4: flannel.1: mtu 1450 qdisc noqueue state UNKNOWN group default

link/ether ae:4a:e1:f9:52:ea brd ff:ff:ff:ff:ff:ff

inet 10.2.100.0/32 scope global flannel.1

valid_lft forever preferred_lft forever

inet6 fe80::ac4a:e1ff:fef9:52ea/64 scope link

valid_lft forever preferred_lft forever

244: veth007dbe6@if243: mtu 1450 qdisc noqueue master docker0 state UP group default

link/ether f2:02:e1:a2:9f:8a brd ff:ff:ff:ff:ff:ff link-netnsid 0

inet6 fe80::f002:e1ff:fea2:9f8a/64 scope link

valid_lft forever preferred_lft forever

NodePort-svc级别,由kube-proxy操控,所有节点规则统一,逻辑上市全局的

因此,svc上的nodeport会监听在所有的节点上(如果不指定,即是随机端口,由apiserver指定--service-node-port-range '30000-32767'),即使有1个pod,任意访问某台的nodeport都可以访问到这个服务

$ cat nginx-deployment.yaml

apiVersion: apps/v1beta1 # for versions before 1.8.0 use apps/v1beta1

kind: Deployment

metadata:

name: mynginx

labels:

app: nginx

spec:

replicas: 1

selector:

matchLabels:

app: nginx

template:

metadata:

labels:

app: nginx

spec:

containers:

- name: nginx

image: nginx

ports:

- containerPort: 80

$ cat nginx-svc.yaml

kind: Service

apiVersion: v1

metadata:

name: mynginx

spec:

type: NodePort

selector:

app: nginx

ports:

- protocol: TCP

port: 8080

targetPort: 80

$ kubect get pod --show-lables -o wide

NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE LABELS

default mynginx-31893996-f8bn7 1/1 Running 0 12m 10.2.100.2 n2.ma.com app=nginx,pod-template-hash=31893996

$ kubectl get svc --show-lables -o wide

NAMESPACE NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR

default mynginx 10.254.173.173 8080:31277/TCP 9m app=nginx

externalIPs 通过svc创建,在指定的node上监听端口

适用场景: 想通过svc来负载,但要求某台指定的node上监听,而非像nodeport所有节点监听.

[root@n1 external-ip]# cat nginx-deployment.yaml

apiVersion: extensions/v1beta1

kind: Deployment

metadata:

name: nginx-deployment

labels:

app: nginx

spec:

replicas: 1

selector:

matchLabels:

app: nginx

template:

metadata:

labels:

app: nginx

spec:

containers:

- name: nginx

image: nginx

ports:

- containerPort: 80

[root@n1 external-ip]# cat nginx-svc.yaml

apiVersion: v1

kind: Service

metadata:

name: svc-nginx

spec:

selector:

app: nginx

ports:

- protocol: TCP

port: 80

externalIPs:

- 192.168.2.12 #这是我的一台node的ip

- 这个端口是kube-proxy来启动的,所以只有运行kube-proxy的

[root@n2 ~]# netstat -ntulp

tcp 0 0 192.168.2.12:80 0.0.0.0:* LISTEN 11465/kube-proxy

php pod模式,k8s pod的4种网络模式最佳实战(externalIPs )相关推荐

  1. calico的两种网络模式BGP和IP-IP性能分析

    目前使用较多的网络插件有 flannel,calico,canel等,但是如果对比以上几种网络插件的性能,还是calico最受欢迎 一.calico概述 二.性能评测指标 三.物理机性能评测 四.物理 ...

  2. docker容器的四种网络模式

    容器的四种网络模式 docker容器的四种网络模式:bridge 桥接模式.host 模式.container 模式和 none 模式 启动容器时可以使用 –net 参数指定,默认是桥接模式. 以下是 ...

  3. Docker的四种网络模式和相关网络命令等操作

    Docker网络模式 一.实现原理 二.Docker四种网络模式 三.Docker命令 1.查看网络列表 2.自定义网络固定IP 3.暴露端口 4.在宿主机环境执行容器内命令 5.怎么把宿主机的文件传 ...

  4. Dockerfile精编细作(六)四种网络模式bridge、host、container、none

    查看网卡信息 查看ip信息:centos7:ip add或ip addr lo:localhost网卡 ens33:对外网卡以太网,本机ip docker0:docker容器和宿主机通信的网卡,Doc ...

  5. 【Docker】容器的几种网络模式

    当你使用Docker时,你会发现需要了解很多关于网络的知识.Docker作为目前最火的轻量级容器引擎,因此,我们有必要深入了解Docker的网络知识,以满足更高的网络需求.本文介绍了Docker的4种 ...

  6. VMware虚拟机三种网络模式(桥接、NAT、仅主机)的区别

    由于Linux目前很热门,越来越多的人在学习linux,但是买一台服务放家里来学习,实在是很浪费.那么如何解决这个问题?虚拟机软件是很好的选择,常用的虚拟机软件有vmware workstations ...

  7. VMware三种网络模式根本区别

    提到VMware大家就想起了虚拟机技术,虚拟机技术在最近的几年中得到了广泛的发展,一些大型网络服务商都开始采用虚拟机技术,不仅节省了投资成本,更节约了能源的消耗. 我们知道VMware也分几种版本,普 ...

  8. VMware三种网络模式根本区别(图)

    提到VMware大家就想起了虚拟机技术,虚拟机技术在最近的几年中得到了广泛的发展,一些大型网络服务商都开始采用虚拟机技术,不仅节省了投资成本,更节约了能源的消耗. 我们知道VMware也分几种版本,普 ...

  9. Docker的4种网络模式

    我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: host模式,使用--net=host指定. container模式,使 ...

  10. Docker四种网络模式

    四种网络模式 host模式 使用docker run时使用–net=host指定 Docker使用的网络实际上和宿主机一样,在容器内看到的网卡ip是宿主机上的ip. [root@localhost ~ ...

最新文章

  1. CentOS7安装Python3详细步骤与Python2共用方法
  2. 5G NR — Open vRAN 的组织单位
  3. HRESULT:0x80070057 (E_INVALIDARG)的异常的解决方案
  4. 【微信开发】上传下载多媒体文件
  5. django会话跟踪技术
  6. flash我中学时的梦想
  7. 算法笔记_面试题_1.爬楼梯
  8. Tinker在sdk升级后无法成功打补丁包的问题
  9. android studio无法识别mtk,Android6.0 MTK6737 长按 Power 没有真正关机 (MTK IPO 功能) · Younix’s Studio...
  10. 小程序报错类—— thirdScriptError sdk uncaught third Error Cannot read property '$mount' of unde
  11. L2TP连接尝试失败,因为安全层在初始化与远程计算机的协商时遇到一个处理错误
  12. Qt5Core上的CMake错误
  13. 安卓实现多张图片合成或拼接及在图片上添加文字
  14. RationalDMIS 7.1 量块程序 2020
  15. Java算法:牛客网Java版剑指Offer全套算法面试题目整理及电子档,Java算法与数据结构面试题,面试刷题、背题必备!牛客网剑指offer
  16. 软件测试的方法和步骤
  17. qt检测网络状态 Linux,Qt检测设备是否在线(Ping)
  18. 【Android View】初识 View
  19. python的金融计算器_基于python实现的计算器
  20. 把字符串转换成整数 一点小小的经验总结

热门文章

  1. SpringMVC+Spring3+Hibernate4
  2. Hadoop热添加删除节点(含Hbase)
  3. 师傅带徒弟 但是不能 教会徒弟饿死师傅!
  4. DIY购车入门5步法则
  5. php dede 发布时间_DedeCMS发布时间显示多少天月年前
  6. 鸿蒙系统全是外国技术,华为正式发布鸿蒙操作系统!四大技术特性亮眼
  7. 接口测试用例——测试用例评审
  8. linux 空闲物理内存 很少,linux系统free查看内存,发现可用物理内存很少,但是查看进程却发现没进程占用大内存...
  9. python中matplotlib出错_Python中使用matplotlib的报错问题
  10. 下单延迟10s撤单性能测试