Istio 基础环境搭建

210 阅读2分钟

istio 基础环境搭建

K8s 部署环境操作省略

K8s version: 1.21.1 istio version: 1.10.3

环境的准备:

metallb.universe.tf/ #官网

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,可以看到我们现在环境中的拓扑图