[k8s]k8s pod的4种网络模式最佳实战(externalIPs )
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: <LOOPBACK,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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 <nodes> 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
[k8s]k8s pod的4种网络模式最佳实战(externalIPs )的更多相关文章
- k8s pod的4种网络模式最佳实战(externalIPs )
[k8s]k8s pod的4种网络模式最佳实战(externalIPs ) hostPort相当于docker run -p 8081:8080,不用创建svc,因此端口只在容器运行的vm ...
- Docker学习第四天(Docker四种网络模式)
Docker四种网络模式 实现原理 Docker使用Linux桥接(参考<Linux虚拟网络技术>),在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根 ...
- Docker的4种网络模式
我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: · host模式,使用--net=host指定. · container ...
- 【转】虚拟机VMware3种网络模式(桥接、nat、Host-only)的工作原理
VMware网络配置详解一:三种网络模式简介 安装好虚拟机以后,在网络连接里面可以看到多了两块网卡: 其 中VMnet1是虚拟机Host-only模式的网络接口,VMnet8是NAT模式的网络接口, ...
- [转]虚拟机VMware3种网络模式(桥接、nat、Host-only)的工作原理
VMware网络配置详解一:三种网络模式简介 安装好虚拟机以后,在网络连接里面可以看到多了两块网卡: 其 中VMnet1是虚拟机Host-only模式的网络接口,VMnet8是NAT模式的网络接口,这 ...
- 实例讲解虚拟机3种网络模式(桥接、nat、Host-only)
转自:http://www.cnblogs.com/ggjucheng/archive/2012/08/19/2646007.html 前言 很多人安装虚拟机的时候,经常遇到不能上网的问题,而vmwa ...
- VMware网络配置 - 三种网络模式简介
安装好虚拟机以后,在网络连接里面可以看到多了两块网卡: 其 中VMnet1是虚拟机Host-only模式的网络接口,VMnet8是NAT模式的网络接口,这些后面会详细介绍 选择虚拟机网络模 式方法如下 ...
- vmware虚拟机三种网络模式详解_转
原文来自http://note.youdao.com/share/web/file.html?id=236896997b6ffbaa8e0d92eacd13abbf&type=note 由于L ...
- VMware虚拟机三种网络模式的区别(上篇)
提到VMware大家就想起了虚拟机技术,虚拟机技术在最近的几年中得到了广泛的发展,一些大型网络服务商都开始采用虚拟机技术,不仅节省了投资成本,更节约了能源的消耗. 我们知道VMware也分几种版本,普 ...
随机推荐
- 敌兵布阵 HDU1166
基础线段树 #include<cstdio> #include<iostream> using namespace std; int n,p,a,b,m,x,y,ans; st ...
- VsCode下代码导航
Visual Studio Code具有高效的代码编辑器,当与编程语言服务结合使用时,可以为您提供IDE的强大功能和文本编辑器的速度.在本主题中,我们将首先描述VS Code的语言智能功能(建议,参数 ...
- HDU-2066-一个人的旅行 【Dijkstra】
<题目链接> 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰富自己的阅历, ...
- 微信小程序:一起玩连线,一个算法来搞定
微信小程序:一起玩连线 游戏玩法 将相同颜色的结点连接在一起,连线之间不能交叉. 算法思想 转换为多个源点到达对应终点的路径问题,且路径之间不相交.按照dfs方式寻找两个结点路径,一条路径探索完之后, ...
- SpringMvc 文件下载 详解
最近SSM 需要用到文件下载,以前没用过,在百度上找了好久发现没有一篇博客,对于此段代码进行详细讲解, 这里是本人的个人总结,跟大家分享一下!!!不谢 /** * 文件下载 * ResponseEnt ...
- 【Java】同步阻塞式(BIO)TCP通信
TCP BIO 背景 网络编程的基本模型是Clien/Server模型,也就是两个进程之间进行相互通信,其中服务端提供位置信息(绑定的IP地址和监听端口),客户端通过连接操作向服务端监听的地址发起连接 ...
- javac编译出现需要标识符问题解决
因为没有写public static void mian(String[] args) 在类里面只有属性和方法,内部类.不能直接写System.out.println():
- JUnit pass/failure/error区别
pass:被测程序没有抛出异常,得到的是预期的值. failure:被测程序的逻辑有错误,得不到预期的值.执行了JUnit的断言. error:被测程序本身抛出异常,还没有执行到JUnit的断言就抛出 ...
- vsftp安装与配置for Linux
以Centos6中使用为例 1.安装 yum -y install vsftpd 2.基本配置 vi /etc/vsftpd/vsftpd.conf 匿名访问和切换根目录都会给服务器带来安全风险,我们 ...
- C#-MaximumSIze,MinimumSize,窗口默认大小范围---ShinePans
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...