在 k8s 上使用 istio 管控

使用上一篇文章成功安装 k8scalico 后,使用 istio 管控微服务。

下载 istio

  • https://istio.io/docs/setup/getting-started/

  • Istio 1.5.4

1
2
3
4
5
curl -L https://istio.io/downloadIstio | sh -
# 或者从 `https://github.com/istio/istio/releases/latest` 选择版本下载后解压 `tar zxf istio-*.tar.gz`
cd istio-*
# 并将目录下 bin 的路径加入环境变量 `PATH`
export PATH=$PWD/bin:$PATH

安装

  • https://istio.io/docs/setup/install/istioctl/

使用默认配置安装

1
istioctl manifest apply

验证是否安装成功

1
2
istioctl manifest generate > istio.yaml
istioctl verify-install -f istio.yaml

部署

这里简单地引用了 gitea 作为部署镜像,若为微服务,修改相应路由即可。

创建 test namespaces

1
kubectl create namespace test

创建 configmaps

1
2
3
4
5
6
7
8
# config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: config
namespace: test
data:
DB_TYPE: sqlite3
1
kubectl apply -f config.yaml

部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# gitea.yaml
apiVersion: v1
kind: Service
metadata:
name: web
namespace: test
spec:
type: ClusterIP
ports:
- name: http-web
port: 80
targetPort: 3000
selector:
app: web
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
namespace: test
spec:
replicas: 1
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: test
image: gitea/gitea:latest
ports:
- name: port
containerPort: 3000
envFrom:
- configMapRef:
name: config
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: web
namespace: test
spec:
hosts:
- "*"
gateways:
- istio-system/istio-ingressgateway
http:
- match:
- uri:
prefix: "/"
route:
- destination:
host: web
port:
number: 80
1
kubectl apply -f gitea.yaml

查看

修改 istio-ingressgatewayLoadBalancerNodePort 将端口暴露出去。

1
kubectl edit service istio-ingressgateway -n istio-system
1
kubectl get service -n istio-system
1
istio-ingressgateway   NodePort    10.96.203.60    <none>        80:31893/TCP   25m

最后访问 http://${ip}:31893/ 就可以看到 Gitea 的页面了。