1、首先建一个http的Deployment

apiVersion: apps/v1                      #版本信息
kind: Deployment #文件类型
metadata: #Deployment资源的元数据信息 name 和 labels必须有
name: http-deployment
labels:
app: http-label
spec: #spec部分是该Deployment的规格说明。
replicas: 3 #副本数 意味着http的pod 会有三个
selector: #defines how the Deployment finds which Pods to manage 与下面的template定义的标签一致
matchLabels:
app: http-label
template: #每个pod的模板配置信息在这里
metadata: #pod资源的元数据信息 labels必须有  不然上面的selector会选不到
labels:
app: http-label
spec: #spec描述Pod的规格,此部分定义Pod中每一个容器的属性,name和image是必需的。
containers:
- name: httpd
image: httpd
ports:
- containerPort: 80

2、可以通过 kubectl apply -f http.yaml 来启动上面的资源

[root@master1 test]# kubectl apply -f http.yaml
deployment.apps/http-deployment configured
[root@master1 test]# kubectl get pods
NAME READY STATUS RESTARTS AGE
http-deployment-6bd68845b-dhw72 0/1 ContainerCreating 0 7s
http-deployment-6bd68845b-fqf8c 1/1 Running 0 33m
http-deployment-6bd68845b-ksrt5 0/1 ContainerCreating 0 7s

3、这个时候pod里面的http服务只能集群内部访问  看一下pod的网络ip  这是虚拟的ip  通过net实现的

[root@master1 test]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
http-deployment-6bd68845b-dhw72 1/1 Running 0 15m 10.130.209.237 node1 <none> <none>
http-deployment-6bd68845b-fqf8c 1/1 Running 0 48m 10.130.209.235 node1 <none> <none>
http-deployment-6bd68845b-ksrt5 1/1 Running 0 15m 10.130.209.238 node1 <none> <none>

4、k8s集群内部所有节点都可以访问到

[root@master1 test]# curl 10.130.209.237
<html><body><h1>It works!</h1></body></html>
[root@master1 test]# curl 10.130.209.235
<html><body><h1>It works!</h1></body></html>
[root@master1 test]# curl 10.130.209.238
<html><body><h1>It works!</h1></body></html>
[root@master1 test]#

5、外面怎么访问呢  k8s用 service 来做到的  pod的上层是service  两者通过iptables交互

新建一个service的yaml   httpSvc.yaml

apiVersion: v1
kind: Service #类型这次是Service了
metadata:
name: http-svc
spec:
type: NodePort #NodePort没有 外网不能访问 只能集群访问service接口 nodeport和service也是通过iptables转发的
selector:
app: http-label #这里的标签 表示这个服务会选择这种标签的pod 作为他的后端服务 他来当pod外层的service 统一服务
ports:
- protocol: TCP
nodePort: 30001 #NodePort端口 用来外部访问的 如果不设置,会随机选一个范围(30000~32767)

port: 8080
targetPort : 80

6、同理启动一下  kubectl apply -f httpSvc.yaml

7、看看服务是否都ok

[root@master1 test]# kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
http-svc NodePort 172.30.169.160 <none> 8080:30001/TCP 52m
kubernetes ClusterIP 172.30.0.1 <none> 443/TCP 25h

8、可以集群访问

[root@master1 test]# curl 172.30.169.160:8080
<html><body><h1>It works!</h1></body></html>
[root@master1 test]#

9、外网访问 我的主机ip是 192.168.10.1 在浏览器 输入http://192.168.10.1:30001/

ps:每次访问的是随机去pod的节点的 所以很好的负载均衡了



利用k8s yaml配置文件起一个http能够让外部访问的更多相关文章

  1. Kubernetes 笔记 05 yaml 配置文件详解

    本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. Hi,大家好, ...

  2. K8S之YAML配置文件

    通过 YAML 配置文件 部署 Deployment 使用命令(类似 docker-compose) // 部署 kubectl create -f xxx.yml // 删除 kubectl del ...

  3. k8s yaml说明

    k8s yaml # yaml格式的pod定义文件完整内容: apiVersion: v1       #必选,版本号,例如v1 kind: Pod       #必选,Pod metadata:   ...

  4. Appium + python -yaml配置文件

    在线安装:pip install yaml import yamlimport os # 获取当前脚本所在文件夹路径curpath = os.path.dirname(os.path.realpath ...

  5. k8s yaml示例

    Kind选择 https://kubernetes.io/zh/docs/concepts/workloads/controllers/ Pod示例 apiVersion : v1 #版本v1 kin ...

  6. python的logging模块之读取yaml配置文件。

    python的logging模块是用来记录应用程序的日志的.关于logging模块的介绍,我这里不赘述,请参见其他资料.这里主要讲讲如何来读取yaml配置文件进行定制化的日志输出. python要读取 ...

  7. Spring Boot入门(一):使用IDEA创建Spring Boot项目并使用yaml配置文件

    由于公司最近在做技术转型(从.Net转Java),因此自己也开启了学习Java之路.学习Java怎么能不学习这几年这么火的Spring Boot框架,由于自己有总结的习惯,因此会把学习的过程以博客的形 ...

  8. saltstack主机管理项目:编写插件基类-获取主机列表-提取yaml配置文件(四)

    一.编写插件基类 1.目录结构 1.我是如何获知我有多少种系统? 当客户端第一连接过来的时候,我就已经把这些文件存下来了 ,存在到哪里了?存到数据库了 每次对主机发送命令的动作时,我从库里把数据取出来 ...

  9. python笔记14-读取yaml配置文件(pyyaml)

    yaml简介 1.yaml [ˈjæməl]: Yet Another Markup Language :另一种标记语言.yaml 是专门用来写配置文件的语言,非常简洁和强大,之前用ini也能写配置文 ...

随机推荐

  1. jmeter之json提取器详解

    Json提取器详解 *Apply to:参照正则表达式提取器 *Names of created:自定义变量名. 变量名可以填写多个,变量名之间使用分号进行分隔. 一旦变量名有多个,则下方的json ...

  2. vue源码解析之响应式原理

    关于defineReactive等使用细节需要自行了解 一些关键知识点 $mount时 会 new Watcher 把组件的 updateComponent 方法传给watcher 作为getter ...

  3. canvas也能实现事件系统????

    前言 大家好! 我是热爱图形的fly, 之前在群里和粉丝讨论canvas 如何事件系统, 然后呢? 我自己其实也对这个比较感兴趣, 我看过很多canvas 实现的项目, 比如canvas 实现思维导图 ...

  4. Golang语言系列-14-单元测试

    单元测试 字符串切割函数 package split_string import ( "fmt" "strings" ) // Split:切割字符串 // e ...

  5. HCNA Routing&Switching之访问控制列表ACL

    前文我们了解了DHCP服务相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15147870.html:今天我们来聊一聊访问控制列表ACL: ACL(ac ...

  6. Spring源码解析之ConfigurationClassPostProcessor(一)

    ConfigurationClassPostProcessor 在前面一个章节,笔者和大家介绍了在构造一个应用上下文时,spring会执行到PostProcessorRegistrationDeleg ...

  7. 【原创】oracle提权执行命令工具oracleShell v0.1

    帮一个兄弟渗透的过程中在内网搜集到了不少oracle连接密码,oracle这么一款强大的数据库,找了一圈发现没有一个方便的工具可以直接通过用户名密码来提权的.想起来自己之前写过一个oracle的连接工 ...

  8. 浅谈 SQL 注入(注入篇)

    一.SQL注入简介 1.1 什么是SQL注入 在用户可控制的参数上过滤不严或没有任何限制,使得用户将传入的参数(如URL,表单,http header)与SQL语句合并构成一条 SQL语句传递给web ...

  9. 30 个极大提高开发效率超级实用的 VSCode 插件

    Visual Studio Code 的插件对于在提升编程效率和加快工作速度非常重要.这里有 30 个最受欢迎的 VSCode 插件,它们将使你成为更高效的搬砖摸鱼大师.这些插件主要适用于前端开发人员 ...

  10. C# prism 框架

    定义Region (RegionManager) 定义Region 的方式有两种,一个是在XMAL界面指定,另一种这是代码当中指定. RegionManager.RegionName(XMAL) Re ...