如何让Kubernetes集群内的应用访问集群外的服务

关键词:

  • kubernetes
  • docker
  • Service Catalog
  • Service Broker
  • Helm

一、背景介绍

    本文主要介绍如何让Kubernetes集群内的应用访问集群外的服务;从而实现应用与服务的分离,解耦,使得应用开发人员只关注自己的核心业务逻辑;而不用关心服务的生命周期。
    采取的主要方案是使用Service Catalog与Service Broker技术。
    至于Service Catalog与Service Broker的原理,可以参考一下的链接:
    https://blog.csdn.net/dkfajsldfsdfsd/article/details/81062077
    https://github.com/kubernetes-incubator/service-catalog
    https://github.com/openservicebrokerapi/servicebroker

二、测试环境介绍

2.1 虚拟机环境介绍

系统类型 IP role cpu memory hostname
CentOS 7.4.1708 172.16.91.215 master 4 4G master
CentOS 7.4.1708 172.16.91.216 worker 4 4G slave1
CentOS 7.4.1708 172.16.91.217 worker 2 1G slave2

注意:
最好将内存和cpu分配的多些,不然,很有可能导致catalog-apiserver中的etcd服务不能正常提供服务;
或者部署catalog时,修改etcd中的资源属性配置

2.2 现有服务介绍

  1. Kubernetes 服务

  2. docker 服务

    • docker版本
      docker版本
  3. helm 服务
    helm的部署,可以参考下面的链接
    https://www.jianshu.com/p/200020e7a843
    注意:
    Tiller的权限设置,不要参考上面链接的,可以使用下面的方式:

    Tiller权限设置

    https://github.com/kubernetes-incubator/service-catalog/blob/master/docs/install.md

三、主要步骤说明

3.1 部署方式说明

使用Helm来部署Service Catalog 和 Service Borker

3.2 主要分为以下步骤:

四、部署Service Catalog

4.1 下载catalog-0.1.27.tgz

helm fetch svc-cat/catalog --version 0.1.27 

4.2 部署Service Catalog

  • 方式一:可以直接安装部署,
  • 方式二:根据自己的需求,做一些修改

4.2.1 本文采用方式二

  1. 解压catalog-0.1.27.tgz
    tar -zxvf catalog-0.1.27.tgz
    cd catalog
    解压catalog
  2. 编辑values.yaml文件
    • 修改镜像的拉取策略:

      • 将imagePullPolicy: Always修改为imagePullPolicy: IfNotPresent
    • 将健康校验禁止掉(可能是docker版本的问题,导致健康校验总是报错,从而导致pod服务异常)

      • 将enabled: true修改为enabled: false
    • 或者直接使用下面的命令来替换(下面的命令有问题,还在排查中)
      sed -i 's#imagePullPolicy: Always#imagePullPolicy:  IfNotPresent#g' values.yaml
      sed -i 's#enabled: true#enabled: false#g' values.yaml
      sed -i 's#image: quay.io/kubernetes-service-catalog/service-catalog:v0.1.27#image: registry.cn-qingdao.aliyuncs.com/kubernetes_xingej/catalog:v0.1.27#g' values.yaml

      values.yaml

  3. cd templates
    下面的命令,有问题,建议手动修改
    sed -i 's#imagePullPolicy: Always#imagePullPolicy: IfNotPresent#g' apiserver-deployment.yaml
    sed -i 's#image: quay.io/coreos/etcd:latest#image: registry.cn-qingdao.aliyuncs.com/kubernetes_xingej/etcd:3.2.24#g' apiserver-deployment.yaml
    注意
    etcd版本,不一定非得是3.2.24
  1. 部署Service Catalog
    • helm install /root/catalog --name catalog --namespace catalog
    • 如何安装失败的话,就删除
      • helm del --purge catalog
        install catalog
  2. 查看部署情况
    kubectl get pod -n catalog
    查看catalog部署情况

五、部署Service broker

5.1 在k8s集群外创建mysql服务

  1. 下载mysql:5.6镜像(不建议使用8.0或者最新的版本,可能会存在验证问题)
    docker pull mysql:5.6

  2. 编写启动脚本
    mkdir mysql
    cd mysql

    tee start-mysql.sh <<-'EOF'

    !/bin/bash

    cur_dir=`pwd`
    docker stop test-mysql
    docker rm test-mysql
    docker run --name test-mysql -v ${cur_dir}/data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
    EOF

  3. chmod +x start-mysql.sh && ./start-mysql.sh

    mysql服务容器化

  4. docker exec -it test-mysql bash

  5. 创建数据库
    mysql -uroot -p123456
    create database mysql_service_broker;
    show databases;

    创建数据库

5.2 部署mysql-broker

  1. 下载mysql-broker
    git clone https://github.com/xej520/shared-mysql-service-broker.git

  2. cd shared-mysql-service-broker

  3. kubectl apply -f k8s/namespace.yml

  4. cp k8s/secret.yml.sample k8s/secret.yml

  5. 需要根据自己的实际情况,来修改密钥
    文件中,注释的地方说明了如何得到具体的值。

    • 修改mysql的url地址
    • 修改用户名和密码
      修改secret.yaml
    • kubectl create -f k8s/secret.yaml
      create secret
  6. 修改k8s/deployment.yml文件中的镜像拉取策略
    将imagePullPolicy: Always修改为imagePullPolicy: IfNotPresent

  7. 修改k8s/deployment.yml文件中的镜像
    将image: making/shared-mysql-service-broker:0.0.3 修改为image: registry.cn-qingdao.aliyuncs.com/kubernetes_xingej/shared-mysql-service-broker:0.0.3

  8. kubectl apply -f k8s/deployment.yml

    • kubectl get pod -nosb #查看部署是否成功?
      create shared-mysql-service-broker
  9. kubectl apply -f k8s/cluster-service-broker.yml

    • 查看部署情况
      kubectl get clusterservicebrokers,clusterserviceclasses,clusterserviceplans,serviceinstances,servicebindings -oyaml
  10. 创建实例

    • kubectl apply -f k8s/sample/service-instance.yml
    • 查看实例对象是否创建成功?
      • kubectl get clusterservicebrokers,clusterserviceclasses,clusterserviceplans,serviceinstances,servicebindings -oyaml
    • 如果存在问题,就不要往下进行了,先解决问题。
      create instance
  11. binding

    • kubectl apply -f k8s/sample/service-binding.yml
    • 查看bingding对象是否创建成功?
      • kubectl get clusterservicebrokers,clusterserviceclasses,clusterserviceplans,serviceinstances,servicebindings -oyaml
    • 如果存在问题,就不要往下进行了,先解决问题。
    • 如果创建成功的话,会在默认命名空间下,会创建一个secret对象,名称是wp-db-secret
    • kubectl get secret wp-db-secret -oyaml
      查看是否绑定成功

      查看wp-db-secret对象

      k8s集群内的应用就是通过wp-db-secret这个密钥,访问外面的mysql服务的。

六、测试:如何使得k8s集群内的应用访问集群外的服务?

  1. 使用k8s/sample/wordpress.yaml
    如果报挂载问题的话,可以做以下修改
    mkdir /usr/local/wd
    删除PVC

    更新hostPath
  1. kubectl create -f k8s/sample/wordpress.yaml

  2. kubectl get pod -owide


    查看wordpress
  3. 通过curl命令来获取catalog
    随便创建一个pod,然后执行下面的命令即可

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容

  • Service Catalog(服务目录)是Kubernetes社区的孵化项目Kubernetes Service...
    小白_18M阅读 9,403评论 0 14
  • 时隔大半年,我又回来了,这回带来的是最近非常火的容器编排工具——kubernetes 先附上docker 官网和k...
    我的橙子很甜阅读 13,182评论 2 79
  • #启发式提问#开发多维思考的法宝 近期发现娃子跟他爹狠习惯说三个字:不知道,然后他爹也搞不定了,然后就没有然后了。...
    A杨子阅读 225评论 0 0
  • Hi Mr. Guo, Haven’t contacted you for a while. How are yo...
    zhefeng阅读 144评论 0 0
  • 一直孜孜不倦想给自己取个好名字。小学的时候,课本里有一首歌叫刨洋芋,和我的名字谐音,男同学们就跑来笑话我。我觉得特...
    芋头姐阅读 406评论 0 2