从零开始应⽤Istio--⼊门⽰例-minikube
0.1. ⼀. 安装环境
0.2. ⼆. 安装istio
0.2.1. 获取Istio release , 我本地使⽤的为0.4.0版本
0.2.2. 进⼊istio⽬录
0.2.3. 添加istioctl 到PATH
0.2.4. 安装, 这⾥为了⽅便安装了不带TLS的版本
0.2.5. (可选)安装Istio-Initializer, 可以⾃动注⼊sidecar
0.3. 三. 创建应⽤和镜像
0.3.1. 创建hello-node应⽤和镜像
0.3.2. 创建hello-py应⽤和镜像
0.4. 四. 部署和发布应⽤到k8s
0.4.1. 新建⽂件hello-istio.yaml
0.4.2. 使⽤kubectl 将服务发布到Kubernetes
0.4.3. 访问验证
0.4.4. 清除
Istio 是Service Mesh下⼀代微服务架构的⼀个完整的解决⽅案,本⽂在本地实验环境中开发和部署了⼀个简单的⽰例应⽤.本例⼦中使⽤了两个应⽤,hello-node和hello-py. 调⽤关系如下
应⽤调⽤关系
0.1. ⼀. 安装环境
0.2. ⼆. 安装istio
0.2.1. 获取Istio release , 我本地使⽤的为0.4.0版本
0.2.2. 进⼊istio⽬录
cd istio-0.4.0
0.2.3. 添加istioctl 到PATH
export PATH=$PWD/bin:$PATH
0.2.4. 安装, 这⾥为了⽅便安装了不带TLS的版本
kubectl apply -f install/kubernetes/istio.yaml
0.2.5. (可选)安装Istio-Initializer, 可以⾃动注⼊sidecar
kubectl apply -f install/kubernetes/istio-initializer.yaml
查看是否安装正常,看istio-pilot, istio-mixer, istio-ingress三个服务是否部署
kubectl get svc -n istio-system
kubectl get svc -n istio-system
kubectl get pods -n istio-system
kubectl get pods -n istio-system
这样istio就安装完成了
0.3. 三. 创建应⽤和镜像
本例⼦中使⽤了两个应⽤,hello-node和hello-py. hello-node为nodejs应⽤,提供⼀个接⼝返回⼀个JSON对象; hello-py为python应⽤,调⽤hello-node提供的接⼝获取JSON对象,简单封装后并返回到外部调⽤者(curl/浏览器或其他)
0.3.1. 创建hello-node应⽤和镜像
创建hello-node应⽤
创建⼀个⽬录nodeserver, 并创建⼀个server.js⽂件内容如下
var http = require('http');
var handleRequest = function(request, response) {
console.log('Received request for URL: ' + request.url);
response.writeHead(200, {'Content-Type': 'application/json'});
var data = {
"name":"nodejs-istio",
"value":"Hello World!"
};
};
var www = ateServer(handleRequest);
www.listen(8080);
创建镜像在nodeserver⽬录下新建Dockerfile,内容如下
FROM node:6.9.2
EXPOSE 8080
COPY server.js .
CMD node server.js
为了使⽤Minikube的docker环境执⾏
eval $(minikube docker-env)
当不再使⽤minikube环境时可以使⽤eval $(minikube docker-env -u)恢复
使⽤docker build构建镜像
docker build -t hello-node:v1 .
0.3.2. 创建hello-py应⽤和镜像
创建hello-py应⽤
新建⽂件夹pythonserver, 并新建⽂件productpage.py,内容如下, 拿官⽅例⼦改的
#!/usr/bin/python
from flask import Flask, request, render_template, redirect, url_for
import simplejson as json
import logging
import requests
# These two lines enable debugging at httplib level (requests->urllib3->http.client)
# You will see the REQUEST, including HEADERS and DATA, and RESPONSE with HEADERS but without DATA. # The only thing missing will be the response.body which is not logged.
try:
import http.client as http_client
except ImportError:
# Python 2
import httplib as http_client
http_client.HTTPConnection.debuglevel = 1
app = Flask(__name__)
from flask_bootstrap import Bootstrap
Bootstrap(app)
def getForwardHeaders(request):
headers = {}
user_cookie = ("user")
if user_cookie:
headers['Cookie'] = 'user=' + user_cookie
incoming_headers = [ 'x-request-id',
'x-b3-traceid',
'x-b3-spanid',
'x-b3-parentspanid',
'x-b3-sampled',
'x-b3-flags',
'x-ot-span-context'
]
for ihdr in incoming_headers:
val = (ihdr)
if val is not None:
headers[ihdr] = val
#print "incoming: "+ihdr+":"+val
return headers
# The UI:
@ute('/')
@ute('/index.html')
def index():
headers = getForwardHeaders(request)
result = {
"code": 200,
"data": getProductDetails(headers),
"author": "hello-py",
"version": "1.0.0"
}
return json.dumps(result), 200, {'Content-Type': 'application/json'}
# Data providers:
def getProductDetails(headers):
try:
url = "hello-node:8080"
res = (url, headers=headers, timeout=3.0)
except:
res = None
status = res.status_code if res is not None and res.status_code else 500
return {'error': 'Sorry, product details are currently unavailable for this book.'}
if __name__ == '__main__':
if len(sys.argv) < 2:
print( "usage: %s port" % (sys.argv[0]))
p = int(sys.argv[1])
print( "start at port %s" % (p))
app.run(host='0.0.0.0', port=p, debug=True, threaded=True)
其中url = "hello-node:8080"这⾥指定该请求需要路由到hello-node服务在pythonserver⽬录下新建⽂件
requests
flask
flask_json
flask_bootstrap
json2html
simplejson
gevent
构建镜像, 在pythonserver⽬录新建Dockerfile
FROM python:2.7-slim
./
RUN pip install --no-cache-dir -
COPY productpage.py /opt/microservices/
COPY templates /opt/microservices/templates
/opt/microservices/
EXPOSE 9080
WORKDIR /opt/microservices
CMD python productpage.py 9080
构建
docker build -t hello-py:v1 .
完成后可以通过docker images查看是否成功
0.4. 四. 部署和发布应⽤到k8s
0.4.1. 新建⽂件hello-istio.yaml
apiVersion: v1
kind: Service
metadata:
name: hello-node
labels:
app: hello-node
spec:
name: http
selector:
app: hello-node
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: hello-node-v1
spec:
replicas: 1
template:
metadata:
labels:
app: hello-node
version: v1
spec:
containers:
-
name: hello-node
image: hello-node:v1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
---
>>>>>>>>>>>>>>>>>>>### # Productpage services
>>>>>>>>>>>>>>>>>>>### apiVersion: v1
kind: Service
metadata:
name: hello-py
labels:
app: hello-py
spec:
ports:
- port: 9080
name: http
selector:
app: hello-py
---
apiVersion: extensions/v1beta1flask下载
kind: Deployment
metadata:
name: hello-py-v1
spec:
replicas: 1
template:
metadata:
labels:
app: hello-py
version: v1
spec:
containers:
- name: hello-py
image: hello-py:v1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9080
---
>>>>>>>>>>>>>>>
# Ingress resource (gateway)
>>>>>>>>>>>>>>####
apiVersion: extensions/v1beta1
kind: Ingress
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
Centos下安装superset完整安装教程
« 上一篇
基于小程序的毕业生就业信息跟踪系统研究
下一篇 »
推荐文章
热门文章
-
随机森林算法的改进方法
2024-10-02 -
基于随机森林算法的风险预警模型研究
2024-10-02 -
Python中的随机森林算法详解
2024-10-02 -
随机森林发展历史
2024-10-02 -
如何使用随机森林进行时间序列数据模式识别(八)
2024-10-02 -
随机森林回归模型原理
2024-10-02 -
如何使用随机森林进行时间序列数据模式识别(六)
2024-10-02 -
如何使用随机森林进行时间序列数据预测(四)
2024-10-02 -
如何使用随机森林进行异常检测(六)
2024-10-02 -
随机森林算法和grandientboosting算法 -回复
2024-10-02 -
随机森林方法总结全面
2024-10-02 -
随机森林算法原理和步骤
2024-10-02 -
随机森林的原理
2024-10-02 -
随机森林 重要性
2024-10-02 -
随机森林算法
2024-10-02 -
机器学习中随机森林的原理
2024-10-02 -
随机森林算法原理
2024-10-02 -
使用计算机视觉技术进行动物识别的技巧
2024-10-02 -
基于crf命名实体识别实验总结
2024-10-02 -
transformer预测模型训练方法
2024-10-02
最新文章
-
随机森林算法介绍及R语言实现
2024-10-02 -
基于随机森林优化的神经网络算法在冬小麦产量预测中的应用研究_百度文 ...
2024-10-02 -
基于正则化贪心森林算法的情感分析方法研究
2024-10-02 -
随机森林算法和grandientboosting算法
2024-10-02 -
基于随机森林的图像分类算法研究
2024-10-02 -
随机森林结合直接正交信号校正的模型传递方法
2024-10-02
发表评论