2020-06-09【阿里云ECS搭建minikube和Istio1.6】(2)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2020-06-09【阿里云ECS搭建minikube和Istio1.6】(2)相关的知识,希望对你有一定的参考价值。

参考技术A 愿每天太阳升起的时候,你都对这个世界存有爱意。

最近在研究Istio1.6新特性,于是想自己搭一个试试看。计划是这样的:
1)买一台阿里云ECS,用CentOS系统;
2)装一个minikube,跑一个Guestbook应用验证成功;
3)再装一个Istio1.6,跑一个Bookinfo应用验证成功。

计划是一天弄好,但是看起来很简单的事情,还是遇到了很多问题,花了两天的时间才终于弄好,分享给各位。本文是第二篇,介绍Kubernetes示例程序验证和反向代理Ngnix的配置。

Guestbook是一个php Web应用,包括frontend、redis-master和redis-slave三个微服务。
其中,redis-master服务处理写请求,redis-slave服务处理读请求。
具体配置参考 Kubernetes官方文档 。

pod:按照replica,部署了1个redis-master、2个redis-slave、3个frontend,可以看到他们都在 Running状态。

service:

可以看到frontend是通过NodePort起来的,可以通过命令获得访问地址:

或者直接使用http://<ECS 私有ip>: 80映射端口(30004)访问即可。

由于用ECS的公网IP一直访问不到服务,于是想到用nginx做一个转发,不知道官方正解是什么,感觉每个服务都要配转发规则实在是有点儿原始。

首先想到用docker起一个nginx container,在里面配置转发规则。

还是访问不到,我猜是请求直接转发到container内部,但是想要访问的服务并不是起在容器内部,所以访问不到(不知道我的猜测对不对)。

于是放弃docker的方式,选择直接在ECS里安装nginx。

下一篇将介绍Istio1.6安装和示例程序Bookinfo的配置。

使用官方命令启动k8s应用一直卡在init阶段,查看event发现拉镜像失败。
原因:
k8s的镜像默认都是从谷歌拉,由于科学上网,只能借助开源项目 https://github.com/anjia0532/gcr.io_mirror 拉镜像,再手动tag。

解决办法:
参照 https://cloud.tencent.com/developer/article/1353088
1)添加pull-google-container工具脚本 pull-google.sh:

2)放到/usr/local/bin下面:

3)使用pull-google-container命令,他直接做好image名称替换->拉image->打标签,非常省心。

如果想将LoadBalancer的类型切换到nodeport,可通过这个命令设置:
kubectl patch service istio-ingressgateway -n istio-system -p '"spec":"type":"NodePort"'
之后通过私有IP+80端口的形式使用HTTP访问。

HTTP/1.1 426 Upgrade Required
Upgrade: HTTP/2.0
Connection: Upgrade

原因:
nginx反向代理默认走http 1.0版本,但是被反向代理的container走的是1.1版本

解决办法:
转发处配置支持http1.1

原因:
只对/productpage路径下的资源进行了转发,css、js等资源不在该路径下就找不到了。

解决办法:
配置 proxy_set_header 增加对css和js等资源的转发。

istiod 是一个单体应用,它用较低的复杂性提供了和之前版本一致的功能。组成旧版控制平面的服务都还以子模块的方式存在于项目之中,但提供了更好的运维体验。操作者只需关注单一二进制文件的运行和升级了。简言之,把之前复杂的控制面组件(Pilot、Gallery、Injector、Mixer和Citadel)作为内部子模块放到istiod里。

有两篇文章对istiod的内容作了介绍,讲的挺好,推荐看一下:
(译)Istiod——回到单体的理由
Service Mesh 化繁为简: 基于 Istiod 回归单体设计

阿里云ECS服务器的搭建

  之前写了一个Android小项目,然后里面各种与后台数据库的交互,然后差不多完成了吧!感觉应该买一个服务器,而不是每次都是需要启动MyEclipse,启动Tomcat服务器才能够启动服务,获取到数据。那么这次就讲一下阿里云ECS服务器搭建的流程吧!

 

  1. 去阿里云的官网购买服务器,菜单栏的"产品"——>"弹性计算"——>"云服务器ECS"

技术分享

 

  2. 进去里面购买,分为包年包月 与 按量付费 两种模式,其实价格对于学生党来说还是不算便宜的。这样就正好在手机阿里云里面有一个学生认证专区,可以9.94元购买一个月的服务器,不过只能买6个月,也就60块钱了。然后包年包月中好像最便宜的是45块钱一个月,因为 Rocking7189 还是学生,所以就占了这次便宜。

 

  3. 关于学生特权,购买之后它会产生一个实例,然后这个实例根本没有让我们设置其密码(后面要用到)。而如果是按照第一步去购买的,那么会需要自己填写密码

技术分享

  

  4. 买完之后登录阿里云的控制台,会看到左侧有一系列的引导,选择云服务器ECS,再选择该引导条下的实例就好,然后就可以在网页上看到购买的服务器的实例信息   

技术分享

技术分享

 

  5. 选择购买的该实例的右侧 更多,选择 连接管理终端... ,它会产生一个终端密码,好像可以更改,不过它提醒你的是一定一定要记住这个密码。然后输入该终端密码就能够进入到远程服务器界面(我买的服务器的操作系统是Windows Server 2012).

技术分享

 

  6. 通过远程终端密码进来之后,会需要你按Ctrl+Alt+Del键登录,我之前还真的傻傻的按这三个组合键,然后一直是进入安全选项,后面发现在该界面的左上角有一个“发送远程命令”,拉开下拉选项可以看到需要点击的选项,然后就可以登录了

技术分享

 

  7. 然后进入的就是输入密码的界面,该密码就是之前我说的实例密码,不是阿里云账号的登录密码、不是终端密码,然后学生特权购买的没有设置过密码,所以需要在之前讲到的实例界面右侧的更多中。选择“重置密码”,其中重置好像点一次还不会讲验证码发你,之前自己弄的时候等了好久,后面点第二次获取验证码才发短息过来。

技术分享

技术分享

 

  8. 重置完密码之后,以为在刚刚的登录密码的界面输入现在的重置密码就能进了吗?还不行哦!还需要点击 实例 的 更多,然后选择重启才行,就像Windows系统更新驱动什么的都是需要重启才能生效。

技术分享

 

  9. 终于可以登录进来了,不过进来又该执行什么操作呢?这时候,咱们不需要在网页上进行以下的操作。在Windows的操作系统下,打开 运行【Win + R】,输入mstsc,打开 远程桌面连接 界面,其中计算机是 实例中 显示的弹性IP,用户名是 实例名 + “\\Administrator”, 配置完这再点击右侧的本地资源,点击 本地设备和资源 下的详细信息,在打开的窗口中,勾选上驱动器中想要让服务器能访问到的操作系统的盘符,点击确定,再点击连接即可。

技术分享

 

  10. 点击完连接,在弹出的窗口中输入刚刚重置的(或者是一开始的实例的密码),然后点击确认按钮,登录进远程操作系统中

技术分享

 

  11. 然后进去的界面其实就和Window一样了,不过里面只有一个C盘是可以使用的,然后需要在这边配置服务器的环境【JDK + MySQL(顺带Navicat) + Tomcat】,那么现在首要步骤就是讲这些安装包传到服务器端了,之前苦了我还想着用QQ,一边一个QQ,来传输文件,后面发现,主机这边的文件可以直接粘贴到服务器那边,次奥。那么就将全部的安装包 (安装包底下给出连接,如果失效记得提醒我) 拷过来即可,然后就是安装以及环境变量的配置了。这里就不做叙述了。

 

  12. 环境弄好之后,最后就是需要往服务器中加入之前自己用到的数据,主要是MyEclipse中的服务端工程以及MySQL下的数据库信息,那么如何传到这边来使用呢?也直接直接打包? 关于服务端数据,右键项目,然后选择 Export...,再将导出格式转为WAR类型,选择next,其他的配置和我差不多即可,点击finish完成 WAR 文件的生成 。

技术分享

 

  13. 服务端的数据生成了 WAR 类型的文件,那么数据库呢?咱们可以在Navicat可视化软件中,右键 数据库文件, 然后选择 转存SQL文件 ——> 数据与结构。生成 .sql 文件

技术分享

 

  14. 最后将生成的 .sql 文件与 .war 文件也粘贴到服务器那边,然后在服务器那边的 Navicat 中,建一个与打包的数据库一样的名字的数据库,然后右键,选择 运行SQL文件...,然后在弹出的窗口中,选择打包过来的 .sql 文件,点击开始导入数据信息。

技术分享

 

  15. 导入 .war 文件,在服务器这边找到 tomcat的安装路径,然后将 文件 放在 其webapps 文件夹中,然后双击 Tomcat 的 bin 目录下的 startup.bat文件来启动 Tomcat 服务器,然后在 webapps文件夹下会生成与 .war文件名对应的文件夹,里面是一些资源文件等等。最后需要将Android端中的以前连接MyEclipse的服务端的IP(本地IP)改为 阿里云服务器 实例的弹性IP。重新运行Android项目即可。

 

  16. 搭建过程中遇到的一些问题:8

  ①、Android端连接好服务器之后没有数据,后面发下是乱码问题,需要将服务器端的Tomcat中的安装路径下的 conf 文件夹中的 server.xml 文件中编码格式改为 UTF-8

    更改前:  <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

 

    更改后:  <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding=‘UTF-8‘/>

  

  ②、Tomcat 的 bin目录下双击startup.bat闪退,开启不了服务器:可能原因是上面的server.xml文件中粗心的加入或删除了某些东西,或者是在startup.bat与shutdown.bat文件中的开头都加上以下两句话:

    SET JAVA_HOME=C:\\development\\java\\jdk1.7.0_80【java jdk目录】

    SET TOMCAT_HOME=C:\\development\\apache-tomcat-7.0.53【解压后的tomcat文件目录】

 

  附录:服务器环境的安装包:(先等会,这边的网不能进百度云,明天传)

 

以上是关于2020-06-09【阿里云ECS搭建minikube和Istio1.6】(2)的主要内容,如果未能解决你的问题,请参考以下文章

阿里云服务器ecs怎样搭建网站

阿里云ECS搭建SVN配置外网

如何用阿里云ecs服务器搭建自己的个人网站

极智开发 | 阿里云ECS本地开发环境搭建

阿里云ECS服务器部署HADOOP集群:Sqoop 安装

阿里云ECS服务器的搭建