istio 基础环境搭建
K8s 部署环境操作省略
K8s version: 1.21.1
环境的准备:
https://metallb.universe.tf/ #官网
https://metallb.universe.tf/installation/#installation-by-manifest #install
1 2 3 4
| kubectl create ns metallb-system
wget https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/metallb.yaml
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| # 查看镜像 grep image metallb.yaml
# 拉取镜像 docker pull quay.io/metallb/speaker:v0.10.2 docker pull quay.io/metallb/controller:v0.10.2
# 修改metallb.yaml 镜像拉取策略 image: quay.io/metallb/speaker:v0.10.2 imagePullPolicy: IfNotPresent #新增
image: quay.io/metallb/controller:v0.10.2 imagePullPolicy: IfNotPresent #新增
# 安装 kubectl apply -f metallb.yaml
# 查看是否创建 kubectl get pods -n metallb-system
|
创建configmap
https://metallb.universe.tf/configuration/#layer-2-configuration
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| vim pool.yaml
apiVersion: v1 kind: ConfigMap metadata: namespace: metallb-system name: config data: config: | address-pools: - name: default protocol: layer2 addresses: - 192.168.15.230-192.168.15.240
kubectl apply -f pool.yaml
docker pull yauritux/busybox-curl docker pull nginx
|
istio 安装
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
| # 下载二进制包 wget https://github.com/istio/istio/releases/download/1.10.3/istio-1.10.3-linux-amd64.tar.gz #wget https://github.com/istio/istio/releases/download/1.10.3/istioctl-1.10.3-linux-amd64.tar.gz
tar xvf istio-1.10.3-linux-amd64.tar.gz
ls istio-1.10.3/bin/ cp istio-1.10.3/bin/istioctl /bin/
#查看 istio 安装的组件 istioctl profile list
# 查看 istio 组件的内容 istioctl profile dump demo #查看demo组件信息,一般demo用于学习环境
# 安装 demo 环境 istioctl install --set profile=demo y
# 查看 kubectl get pods -n istio-system #查看 有对应的ns和pod被创建出来 kubectl get svc -n istio-system #创建出了LoadBalancer类型的 istio-ingressgateway,ip地址为192.168.15.230 # 如果没有配置metallb的话,可以把 istio-ingressgateway 的类型改为 NodePort
# 如果需要卸载 istioctl x uninstall --purge y # 删除命名空间 kubectl delete ns istio-system
|
istio 注入
好用的命名空间切换工具 kubens 下载
1 2 3 4 5
| curl -L https://github.com/ahmetb/kubectx/releases/download/v0.9.1/kubens -o /bin/kubens
chmod +x /bin/kubens
# 使用kubens命令即可列出当前所有的namespace
|
测试一下看之前创建的pod流程
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
| mkdir chap1 cd chap1 kubectl create ns ns1
# 切换namespace kubens ns1 #Context "kubernetes-admin@kubernetes" modifued. #Active namespace is "ns1".
# 创建一个pod的yaml kubectl run pod1 --image=nginx --image-pull-policy=IfNotPresent --dry-run=client -o yaml > pod1.yaml
# 查询参数值 kubectl explain pods.spec
vim /del.txt terminationGracePeriodSeconds: 0 # 编辑pod1 vim pod1.yaml
spec: terminationGracePeriodSeconds: 0 containers: # 创建pod kubectl apply -f pod1.yaml kubectl get pods #此时这个pod里只有一个容器,即没有sidecar
# 删除测试的pod kubectl delete pod pod1
|
使用 istio 单独的注入一个pod
1 2 3 4 5 6 7 8 9 10 11 12
| # 创建 istioctl kube-inject -f pod1.yaml | kubectl apply -f -
# 查看pod数量 kubectl get pods #此时READY数为2
#这个pod新增的docker,就是 pilot,envoy
# sed 's/pod1/pod2/' pod1.yaml | kubectl apply -f - kubectl get pods # 发现这个 pod2 是没有被注入的
|
设置自动 istio 注入,可以通过 namespace 去做
1 2 3 4 5
| #给ns1的命名空间添加istio标签,那么在这个标签里,所有创建的 pod 都会被自动注入 istio kubectl label ns ns1 istio-injection=enabled
# 查看labels kubectl get ns --show-labels
|
安装kiali :图形化工具,可以直观的查看流量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| kubectl get pods -n istio-system
# 安装 kubectl apply -f istio-1.10.3/samples/addons/kiali.yaml # 或者可以选择直接全部都安装上 kubectl apply -f istio-1.10.3/samples/addons/
kubectl get svc -n istio-system # kiali 的PORT:20001,TYPE为 ClusterIP
# 修改 kiali 的 svc kubectl edit svc kiali -n istio-system
sessionAffinity: None type: LoadBalancer #把ClusterIP修改为NodePort或者LoadBalancer # 查看并验证 kubectl get svc -n istio-system # 查看 kiali 的 ip 和端口,使用浏览器访问 # 进入浏览器后可以测试一下,进入 Graph 页面,选择 istio-system 和 ns1 的 Namespace,可以看到我们现在环境中的拓扑图
|