istio 基础环境搭建
K8s 部署环境操作省略
K8s version: 1.21.1 istio version: 1.10.3
环境的准备:
metallb.universe.tf/installatio… #install
kubectl create ns metallb-system
# wget https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/metallb.yaml
vim metallb.yaml
创建 metallb
kubectl create ns metallb-system
# wget https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/metallb.yaml
# 查看镜像
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
metallb.universe.tf/configurati…
# 创建地址池
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
# 所有的 work 节点都需拉取镜像
docker pull yauritux/busybox-curl
docker pull nginx
istio 安装
# 下载二进制包
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 下载
curl -L https://github.com/ahmetb/kubectx/releases/download/v0.9.1/kubens -o /bin/kubens
chmod +x /bin/kubens
# 使用kubens命令即可列出当前所有的namespace
测试一下看之前创建的pod流程
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
# 创建
istioctl kube-inject -f pod1.yaml | kubectl apply -f -
# 查看pod数量
kubectl get pods #此时READY数为2
#这个pod新增的docker,就是 pilot,envoy
## 在创建一个 pod 测试
sed 's/pod1/pod2/' pod1.yaml | kubectl apply -f -
kubectl get pods # 发现这个 pod2 是没有被注入的
设置自动 istio 注入,可以通过 namespave 去做
#给ns1的命名空间添加istio标签,那么在这个标签里,所有创建的 pod 都会被自动注入 istio
kubectl label ns ns1 istio-injection=enabled
# 查看labels
kubectl get ns --show-labels
安装kiali :图形化工具,可以直观的查看流量
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,可以看到我们现在环境中的拓扑图