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. Ubuntu安装ssh,及失败解决方案

    网上有很多介绍在Ubuntu下开启SSH服务的文章,但大多数介绍的方法测试后都不太理想,均不能实现远程登录到Ubuntu上,最后分析原因是都没有真正开启ssh-server服务.最终成功的方法如下: ...

  2. Shell-05-函数

    函数 函数定义 shell中函数的定义格式如下 [ function ] funname [()] { action; [return int;] } 说明: 1.可以带function fun() ...

  3. net start mongodb 提示:发生系统错误 5,拒绝访问。

    问题: net start mongodb 提示:发生系统错误 5,拒绝访问. 无法启动mongodb 服务. 解决办法: 右键cmd,选择以管理员身份运行即可

  4. .Net Core NPOI读取Excel 并转为数据实体类

    创建应用程序 这里直接创建Console程序 引用NPOI的NuGet包 PM> Install-Package NPOI -Version 2.5.1 直接Nuget包管理器添加 导入Exce ...

  5. GAC

    GAC是什么?是用来干嘛的?GAC的全称叫做全局程序集缓存,通俗的理解就是存放各种.net平台下面需要使用的dll的地方.GAC的具体目录在windows/ assembly. 喜欢使用破解软件的朋友 ...

  6. .net core api 对于FromBody的参数验证

    前言 在framework的mvc中,经常会使用 Model.State . ModelState.IsValid 配合着特性进行参数验证,通过这种方式可以降低controller的复杂度,使用方便. ...

  7. uwp 基础知识

    (TitleId,DiaplayName,args,LogoUri,size); Obj.VisualElements.ShowNameOnSquare150x150Logo = true; if ( ...

  8. RibbitMQ 实战教程

    # RabbitMQ 实战教程 ## 1.MQ引言 ### 1.1 什么是MQ `MQ`(Message Quene) : 翻译为 `消息队列`,通过典型的 `生产者`和`消费者`模型,生产者不断向消 ...

  9. jsp中核心标签使用

    <%@ page language="java" import="java.util.*, java.lang.*" pageEncoding=" ...

  10. 你知道 JavaScript 中的 Arguments 对象都有哪些用途吗?

    JavaScript 中 Arguments 对象的用途总结. 前言 相信我们很多人在代码开发的过程中都使用到过一个特殊的对象 -- Arguments 对象. 在实际开发中,Arguments 对象 ...