我准备使用istio来替代原来的traefic网关和consul服务注册发现的方案,但在安装istio过程中遇到了一些问题,把解决的过程记录下来,便于今后遇到类似问题做个参考。

istio安装的中文文档地址:Istio Prelim 1.23 / 文档

参照Istio Prelim 1.23 / 入门 官网的安装方法,首先下载istioctl,然后使用命令istioctl install以默认配置安装,正常部署会安装这两个pod

NAME                                   READY   STATUS    RESTARTS   AGE
istio-ingressgateway-94974fc7f-cxjwz   1/1     Running   0          5d4h
istiod-54785969-6rfzh                  1/1     Running   0          5d4h

我下载的istioctl是1.22.0这个版本,在安装过程中遇到的第一个问题:镜像下拉不下来。


可以通过
kubectl get events -n istio-system
kubectl describe pod istio-ingressgateway-94974fc7f-cxjwz -n istio-system 
kubectl describe pod istiod-54785969-6rfzh -n istio-system 
来查看问题原因。这里涉及下拉的镜像有两个:
pilot
proxyv2

在tar -xzvf istio-1.22.0-linux-amd64.tar.gz 解压后,cd到解压后的目录中查看manifest.yaml文件,可以看到其用的镜像仓库地址是docker.io/istio。这里有两种解决方案:

1、添加指定仓库的参数执行命令

bin/istioctl install --set hub=docker.m.daocloud.io/istio

2、到github下载相应版本的pilot和proxyv2打包文件通过docker本地安装,具体操作如下

到https://gcsweb.istio.io/gcs/istio-release/releases/1.22.0/docker/网址下载
pilot.tar.gz和proxyv2.tar.gz

然后执行命令
sudo docker load -i ./pilot.tar.gz
sudo docker load -i ./proxyv2.tar.gz
sudo docker tag pilot:1.22.0 core.harbor.shell.com:443/istio/pilot:1.22.0
sudo docker tag proxyv2:1.22.0 core.harbor.shell.com:443/istio/proxyv2:1.22.0
sudo docker push core.harbor.shell.com:443/istio/pilot:1.22.0
sudo docker push core.harbor.shell.com:443/istio/proxyv2:1.22.0
将下拉不下来的两个镜像上传到自建的仓库中,然后在将下载仓库修改为本地仓库
bin/istioctl install --set hub=core.harbor.shell.com:443/istio

镜像下拉问题解决后,遇到的第二个问题是 istio-ingressgateway启动不起来。

报错类似这种

warn	sds	failed to warm certificate: failed to generate workload certificate: create certificate: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing: dial tcp: lookup istiod.istio-system.svc: i/o timeout"

一般这种问题属于dns解析的事,根据官网的问题排除步骤可参考如下。

调试 DNS 问题 | Kubernetes

后来重启了 kube-system 下的两个coredns 的pod问题解决了

第三个问题istio-system命名空间下载svc中的istio-ingressgateway一直处于pending状态。

找了很多文档,后来在官网的Istio Prelim 1.23 / 入口网关中找到了问题的答案。

需要通过kubectl edit 将LoadBalancer模式改为NodePort模式。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐