将一组pod公开为网络服务,通过service代理,可以实现负载均衡

一、ClusterIP

此方式只能在集群内访问

1.使用命令暴露已存在的pod

(1)继续使用前面章节的案例,查看名称为nginx的deploy下的pod

kubectl get pod -n dev -owide

进入每个pod容器,更改index.html内容

kubectl exec nginx-6799fc88d8-2rf2c -it /bin/bash -n dev
cd /usr/share/nginx/html/
rm -rf index.html
touche index.html
echo 1111 >> index.html
kubectl exec nginx-6799fc88d8-rnhmd -it /bin/bash -n dev
cd /usr/share/nginx/html/
rm -rf index.html
touche index.html
echo 2222 >> index.htm

(2)使用curl命令访问pod的ip,查看更改后的结果

(3)通过ClusterIP的方式暴露pod,默认就是ClusterIP

kubectl expose deploy nginx  --name=svc-nginx --port=8000 --target-port=80 --type=ClusterIP -n dev

(4)查看暴露后的service

 kubectl get svc -n dev

可以看到分配了一个ClusterIP

(5)访问ClusterIp,查看结果

service把请求负载均衡的分发给后面代理的pod进行处理,可以看到输出结果不一样

(6) 在容器内部通过域名的方式访问:服务名.命名空间.svc:port

进入某个pod容器

kubectl exec nginx-6799fc88d8-2rf2c -n dev -it /bin/bash

在容器内部执行curl命令访问服务的域名

2.删除服务

 kubectl delete svc svc-nginx -n dev

3.通过yaml创建服务

编写svc-nginx.yaml文件

apiVersion: v1
kind: Service
metadata:
labels:
app: svc-nginx
name: svc-nginx
namespace: dev
spec:
selector:
#选择指定标签的Deployment
app: nginx
type: ClusterIP
ports:
- port: 8000
protocol: TCP
targetPort: 80

创建nginx服务

kubectl apply -f svc-nginx.yaml

二、NodePort

此方式不仅能在集群内访问,也可以在集群外部访问,NodePort范围在 30000-32767 之间

1.使用命令暴露已存在的pod

(1)继续使用前面章节的案例,查看名称为nginx的deploy下的pod

kubectl get pod -n dev -owide

进入每个pod容器,更改index.html内容

kubectl exec nginx-6799fc88d8-2rf2c -it /bin/bash -n dev
cd /usr/share/nginx/html/
rm -rf index.html
touche index.html
echo 1111 >> index.html
kubectl exec nginx-6799fc88d8-rnhmd -it /bin/bash -n dev
cd /usr/share/nginx/html/
rm -rf index.html
touche index.html
echo 2222 >> index.htm

(2)使用curl访问pod的ip查看更改后的结果

(3)通过NodePort的方式暴露pod,不指定--name参数,service的名称默认为deploy的名称

kubectl expose deploy nginx --port=8000 --target-port=80 --type=NodePort -n dev

(4)查看暴露后的service

 kubectl get svc -n dev

(5)在集群内访问ClusterIp,查看结果

service把请求负载均衡的分发给后面代理的pod进行处理

(6)在集群外访问

2.删除服务

kubectl delete svc nginx -n dev

3.通过yaml创建服务

apiVersion: v1
kind: Service
metadata:
labels:
app: svc-nginx
name: svc-nginx
namespace: dev
spec:
selector:
#选择指定标签的Deployment
app: nginx
#注意指定type为NodePort
type: NodePort
ports:
- port: 8000
protocol: TCP
targetPort: 80
#指定暴露的端口号,不设置就默认随机一个
#nodePort: 31234

创建成功之后,可以使用上面介绍的方法来查看测试服务

k8s入门之Service(六)的更多相关文章

  1. k8s入门系列之guestbook快速部署

    k8s集群以及一些扩展插件已经安装完毕,本篇文章介绍一下如何在k8s集群上快速部署guestbook应用. •实验环境为集群:master(1)+node(4),详细内容参考<k8s入门系列之集 ...

  2. k8s入门系列之扩展组件(一)DNS安装篇

    DNS (domain name system),提供域名解析服务,解决了难于记忆的IP地址问题,以更人性可读可记忆可标识的方式映射对应IP地址. Cluster DNS扩展插件用于支持k8s集群系统 ...

  3. K8s 入门

    中文文档:https://www.kubernetes.org.cn/kubernetes%E8%AE%BE%E8%AE%A1%E6%9E%B6%E6%9E%84 小结大白话 Portainer 挺好 ...

  4. 反手来个K8S入门到跑路

    layout: post title: 反手来个K8S入门到跑路 category: linux date: 2019-06-09 tags: linux k8s 反手来个K8S入门到跑路 前言 放假 ...

  5. k8s入门你至少需要会哪些

    body { margin: 0; overflow: auto; font: normal 14px Verdana; background: rgba(255, 255, 255, 1); pad ...

  6. k8s入门之集群搭建(二)

    一.准备三台节点 从上篇文章 k8s入门之基础环境准备(一)安装的Ubuntu虚拟机克隆出三台虚拟机,如图所示 启动这三台虚拟机节点,分别做如下配置 虚拟机名称 IP HostName k8sMast ...

  7. Docker入门教程(六)另外的15个Docker命令

    Docker入门教程(六)另外的15个Docker命令 [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第六篇,继续介绍Docker命令.之前的第二篇文章 ...

  8. 无废话ExtJs 入门教程十六[页面布局:Layout]

    无废话ExtJs 入门教程十六[页面布局:Layout] extjs技术交流,欢迎加群(201926085) 首先解释什么是布局: 来自百度词典的官方解释:◎ 布局 bùjú: [distributi ...

  9. k8s入门系列之集群安装篇

    关于kubernetes组件的详解介绍,请阅读上一篇文章<k8s入门系列之介绍篇> Kubernetes集群安装部署 •Kubernetes集群组件: - etcd 一个高可用的K/V键值 ...

随机推荐

  1. FOC中的电流采样

    电流采样是FOC的基础,具体有电流传感器采样.电阻采样,电阻采样以其简单低成本的应用广泛使用. 电阻法采样有单电阻采样.双电阻采样.三电阻采样. 一. 单电阻采样 单电阻采用分时采样,在一个PWM周期 ...

  2. 外部类能用private、protected修饰吗?内部类可以用private、protected修饰吗?

    外部类不能用private.protected修饰不能.内部类能用private.protected修饰不能. 外部类的上一级程序单位是包,因此它只有两个使用范围:包内和包外,因此它只能用public ...

  3. 比较一下 Java 和 JavaSciprt?

    JavaScript 与 Java 是两个公司开发的不同的两个产品.Java 是原 Sun Microsystems 公司推出的面向对象的程序设计语言,特别适合于互联网应用程序 开发:而 JavaSc ...

  4. springBoot集成Elasticsearch抛出Factory method 'restHighLevelClient' threw exception; nested exception is java.lang.NoSuchFieldError: IGNORE_DEPRECATIONS

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'restHighLeve ...

  5. 什么是JDK?什么是JRE?说说它们之间的区别?

     JDK (Java Development Kit)  JDK是整个Java的核心,包括了Java运行环境JRE(Java Runtime Envirnment),一堆Java工具(javac,ja ...

  6. (1/2)Canvas的交互&存为图片-基本篇

    前言 公司的产品同学看到朋友圈疯传的这张图后.一拍脑袋,决定做个H5版本的来推广一波. 需求如下: 文字变成可以点击的,而且还要能够变色(闪瞎有木有) 中间的姓名换成用户的微信头像 点击button后 ...

  7. angular组件开发

    项目中经常会有一些公共组件,比如header,如果每个页面都写一遍的话显得很冗余,而且不利于维护,这时候我们就会考虑将这些公共部分抽取出来,做成一个单独的组件. 然而angular不是很熟悉啊~怎么啵 ...

  8. React 可视化开发工具 shadow-widget 的非可视开发方法

    Shadow Widget 提倡在可视设计器中开发用户界面,输出转义标签,而非 JSX.许多童鞋可能不知道 SW 同样支持用 JSX 设计界面,开发体验比原生 React 编程好出很多,本文就介绍这方 ...

  9. 深入理解ES6之《用模块封装代码》

    什么是模块 模块是自动运行在严格模式下并且没有办法退出运行的Javascript代码 在模块的顶部this的值是undefined 其模块不支持html风格的代码注释除非用default关键字,否则不 ...

  10. ionic3 ion-input进入页面自动获取焦点

    在项目需求中,有需要用到输入框在进入这个页面的时候就自动定位获取这个输入框的焦点. 查了许多资料,也问了ionic3的大神,现将知识点记录如下: 1.能不能直接设置ion-input的属性值来达到自动 ...