学习 Ingress ,推荐使用 LoadBalancer 方式

虽然 NodePort 方式是可以的,但是,理解起来费劲,何况 NodePort 并不适合用于生产环境!

但是,普通学习环境是不支持 LoadBalancer 的 !
幸好有个开源的 MetalLB 可以提供裸机测试环境下 LoadBalancer 支持

重点是为了下一步学习 Ingress ,所以,简单学会 Layer 2 方式, BGP 方式以后再说

METALLB官网

安装

MetalLB 安装文档

官方文档安装方式很完整!

Helm 方式安装

我先使用 Helm 安装上了(确实简单),但是,他那个 value.yaml 配置的 192.168.1.0/24 ,第一个测试例子直接分配到 192.168.1.1 ,这个和我的网关地址一样!
Helm uninstall ,修改了 value.yaml 之后,再安装却死活找不到了# helm install metallb metallb/metallb -f values.yamlError: INSTALLATION FAILED: failed to download "metallb/metallb"

只好改用 Manifest 文件方式

  1. 先下载他的 2 个文件,检查一下里面有没有被墙的 image

    wget https://raw.githubusercontent.com/metallb/metallb/v0.11.0/manifests/namespace.yaml --no-check-certificate

    wget https://raw.githubusercontent.com/metallb/metallb/v0.11.0/manifests/metallb.yaml --no-check-certificate

    里面的 image: quay.io/metallb/controller:v0.11.0
    这个 quay.io 好像没有被墙,无需替换镜像源了,可以直接 pull!

    拿不准的话,可以试试 https://quay.io/ 能不能访问

    文档比较害人
    The installation manifest does not include a configuration file. MetalLB’s components will still start, but will remain idle until you define and deploy a configmap.

    意思是前面 2 个 apply 之后,还需要配置之后才能 running!
    初学时,一旦看到 Pending 或者 err ,就茫然了,踩过一次坑之后才能学会!

  2. 准备好config 文件
    config 文件样本在这里 MetalLB Config配置 文档

    所以,最好准备好这 3 个文件之后,再继续

     [root@centos7-188 metaLB]# lsconfig.yaml  metallb.yaml  namespace.yaml  value.yaml
    

    依次 apply

      kubectl apply -f namespace.yaml kubectl apply -f config.yamlkubectl apply -f metallb.yaml
    

    检查所有 metallb-system 的 pod 和 svc 都 running

    kubectl get pods -A

    kubectl get pods -n metallb-system

     NAME                          READY   STATUS    RESTARTS   AGEcontroller-7dcc8764f4-4dv8d   1/1     Running   0          82mspeaker-glv2l                 1/1     Running   0          82mspeaker-kcnp4                 1/1     Running   0          82mspeaker-vr5mm                 1/1     Running   0          82m
    

测试

  1. 找个简单的 nginx 试试,Service 方式改成 LoadBalancer

    [root@centos7-188 nginx]# cat demo1.yaml

     apiVersion: v1kind: Servicemetadata:name: demo1namespace: defaultlabels:app: demo1spec:type: LoadBalancerports:- port: 80targetPort: httpprotocol: TCPname: httpselector:app: demo1---apiVersion: apps/v1kind: Deploymentmetadata:name: demo1-deploymentnamespace: defaultlabels:app: demo1spec:replicas: 2selector:matchLabels:app: demo1template:metadata:labels:app: demo1spec:containers:- name: demo1image: nginxports:- name: httpcontainerPort: 80protocol: TCP
    
    1. kubectl apply -f demo1.yaml

    2. 检查 pod 和 svc

      kubectl get pods -A

       NAMESPACE        NAME                                        READY   STATUS      RESTARTS      AGEdefault          demo-654c477f6d-m2m8r                       1/1     Running     0             68mdefault          demo1-deployment-796f585477-bzltz           1/1     Running     0             85mdefault          demo1-deployment-796f585477-w5qgz           1/1     Running     0             85m...
      

      kubectl get svc

        NAME         TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)        AGEdemo         ClusterIP      10.109.183.133   <none>          80/TCP         68mdemo1        LoadBalancer   10.103.89.77     192.168.1.240   80:31590/TCP   86mkubernetes   ClusterIP      10.96.0.1        <none>          443/TCP        125m
      
    3. 测试一下
      cluster 内访问,curl 10.103.89.77
      cluster 外访问,curl 192.168.1.240

      效果是一样的!不再需要 暴露 nodePort ,也不再需要 proxy !
      metalLB 对外提供了一个统一的地址:192.168.1.240

       <!DOCTYPE html><html><head><title>Welcome to nginx!</title><style>html { color-scheme: light dark; }body { width: 35em; margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif; }</style></head><body><h1>Welcome to nginx!</h1><p>If you see this page, the nginx web server is successfully installed andworking. Further configuration is required.</p><p>For online documentation and support please refer to<a href="http://nginx.org/">nginx.org</a>.<br/>Commercial support is available at<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p></body></html>
      

k8s学习: 使用 MetalLB 给测试环境配置LoadBalancer 服务相关推荐

  1. Windows驱动开发学习笔记(一)—— 环境配置第一个驱动程序

    Windows驱动开发学习笔记(一)-- 环境配置&第一个驱动程序 环境配置 第一个驱动程序 环境配置 安装VS2010:https://pan.baidu.com/s/1uZWWxCtB60 ...

  2. Linux+javaEE学习笔记之Linux网络环境配置

    Linux+javaEE学习笔记之Linux网络环境配置 网络知识简单介绍: Ip地址是:IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物 ...

  3. Kotlin学习笔记(1)- 环境配置

    系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!kotlin学习笔记系列首发简书和CSDN Kotlin学习笔记(1)- 环 ...

  4. youcans 的 OpenCV 学习课—1.安装与环境配置

    youcans 的 OpenCV 学习课-1.安装与环境配置 作者: youcans@xupt 本系列面向 Python 小白,从零开始实战解说 OpenCV 项目实战. 什么叫从零开始?从软件安装. ...

  5. lex编译dos命令_Lex与Yacc学习(一)之环境配置篇

    Abstract 在开发程序的过程中经常会遇到文本解析的问题,例如:解析 C 语言源程序,编写 脚本引擎等等,解决这种文本解析的方法有很多,一种方法就是自己手动用 C 或者 C++直接编写解析程序,这 ...

  6. CososJS学习笔记(1) 环境配置(填坑版,让你少走弯路!)

    这段时间比较了国外的phaser.pixi.create等h5游戏框架以及国内的egret.cocosjs之后,最后还是决定使用cocosjs进行h5游戏的开发. 先简单地说一下个人的观点:首先pix ...

  7. Android官方开发文档Training系列课程中文版:Activity测试之测试环境配置

    原文地址:http://android.xsoftlab.net/training/activity-testing/index.html 引言 开发者应当将测试作为应用开发周期的一部分.良好的测试用 ...

  8. Linux 内核实验室 —— 基于 Docker/Qemu 的极速 Linux 内核学习、开发和测试环境

    介绍: 项目简介 本项目致力于创建一个基于 Docker + QEMU 的 Linux 实验环境,方便大家学习.开发和测试 Linux 内核. Linux Lab 是一个开源软件,不提供任何保证,请自 ...

  9. 深度学习装机、系统、环境配置指南--预算15000

    随着要处理的任务越来越复杂,对计算能力要求越来越高,所以最近萌生了要自己配一台深度学习主机的想法.只是苦于一直没有钱==然后很幸运的被评上了国奖,果断入手!!!!然后就是历时一周的各种查资料看博客上京 ...

  10. Android测试环境配置

    测试是软件开发中非常重要的一部分,Android中是使用junit测试框架,本文使用的是junit4和Android Studio.Android测试主要分两类本地测试和Instrumented测试, ...

最新文章

  1. KeyDown、KeyPress和KeyUp事件的区别与联系
  2. 【云中沙箱】视频直播技术浅析与实践!
  3. python最好的教程_喜大普奔~可能是最好的Python教程
  4. 非网络引用element-ui css导致图标无法正常显示的解决办法
  5. 静态代码检查工具简介
  6. HUT-1694 零用钱 贪心
  7. matlab怎么设clim,Python Matplotlib.pyplot.clim()用法及代码示例
  8. 系统学习NLP(二十四)--详解Transformer (Attention Is All You Need)
  9. 使用原生js得到页面相关的正确参数
  10. 如何在ADO中使用数据读取器(DataReader)读取数据
  11. I.MX6 linux kernel编译错误处理
  12. (转)人工智能的钟摆
  13. 一个基于SpringBoot的在线教育系统「源码开源」
  14. Pulling without specifying how to reconcile divergent branches is hint: discouraged. You can squelch
  15. Ajax的回调函数(callback)
  16. linux shell 加密shc,使用shc工具加密shell脚本详解
  17. 三级管输入输出特性曲线的分析
  18. 没牙仔的世界(C++)
  19. Shell脚本变量学习_02
  20. 小米(社招)测试开发面经-小米手机管家

热门文章

  1. ssh远程访问失败 Centos7
  2. MySql 双主多从配置指导
  3. 更多编译器对C++11的支持比较
  4. 爬虫之代理和cookie的处理
  5. 屏蔽登录QQ后总是弹出的QQ网吧页面
  6. Unity 利用FFmpeg实现录屏、直播推流、音频视频格式转换、剪裁等功能
  7. Observer模式(观察者设计模式)
  8. Storm Trident示例broadcast
  9. ArcGIS JS 学习笔记2 实现仿百度的拖拽画圆
  10. JBoss - 调整JVM内存 -Xms512m -Xmx1024m