openshift集群安装istio-1.2.0

3 篇文章 0 订阅
2 篇文章 0 订阅

安装

  • 环境变量配置,也存在坑,中英文文档不一致,采用nodeport的部署配置方式
  • 在poenshift中安装时需要注意配置自动注入,注意的配置见采坑记录.这个是通过k8s的Admission Webhook机制实现了sidecar的自动注入(envoy的实现原理)
  • 需要调整istio-demo.yaml中的privileged配置,调整为true否则deployment自动注入的init阶段会产生错误,详细修改方法见采坑记录
下载安装包
  • 下载istio的安装包
    curl -L https://git.io/getLatestIstio | ISTIO_VERSION=1.2.0 sh -
  • 或到版本库中自选版本
    https://github.com/istio/istio/releases
  • 设置istio的环境变量
export ISTIO_HOME=/opt/istio
export PATH=$ISTIO_HOME/bin:$ISTIO_HOME

集群环境预设

不同的集群需要进行不同的预设配置,根据自身集群进行配置(配置地址)

  • openshift集群需要配置特权模式以及anyuid的权限。并配置自动注入(可以不做自动注入的配置,如果不做自动注入需要使用istioctl的命令对接入isitio的deployment yaml进行改写,并不方便,还是建议使用自动注入)
    这里注意一下,尽量不要使用中文文档,可能是中文文档更新迭代速度过慢,文档配置内容与实际对应版本的配置方式不同。会导致配置后不能达到自动注入的功能
  1. 为istio服务账户开放用户权限(默认情况下,openshift不允许使用用户ID 0运行容器)
$ oc adm policy add-scc-to-user anyuid -z istio-ingress-service-account -n istio-system
$ oc adm policy add-scc-to-user anyuid -z default -n istio-system
$ oc adm policy add-scc-to-user anyuid -z prometheus -n istio-system
$ oc adm policy add-scc-to-user anyuid -z istio-egressgateway-service-account -n istio-system
$ oc adm policy add-scc-to-user anyuid -z istio-citadel-service-account -n istio-system
$ oc adm policy add-scc-to-user anyuid -z istio-ingressgateway-service-account -n istio-system
$ oc adm policy add-scc-to-user anyuid -z istio-cleanup-old-ca-service-account -n istio-system
$ oc adm policy add-scc-to-user anyuid -z istio-mixer-post-install-account -n istio-system
$ oc adm policy add-scc-to-user anyuid -z istio-mixer-service-account -n istio-system
$ oc adm policy add-scc-to-user anyuid -z istio-pilot-service-account -n istio-system
$ oc adm policy add-scc-to-user anyuid -z istio-sidecar-injector-service-account -n istio-system
$ oc adm policy add-scc-to-user anyuid -z istio-galley-service-account -n istio-system
$ oc adm policy add-scc-to-user anyuid -z istio-security-post-install-account -n istio-system
  1. 要对默认的serviceaccount添加特权模式
    $ oc adm policy add-scc-to-user privileged -z default -n <target-namespace>
  2. 启用webhook和证书签名请求才可能使自动注入生效,需要修改集群主节点的主配置文件

默认情况下可以在主机中找到主配置文件/etc/origin/master/master-config.yaml

在主配置文件的同级目录中创建一个名为master-config.patch的文件

admissionConfig:
  pluginConfig:
    MutatingAdmissionWebhook:
      configuration:
        apiVersion: apiserver.config.k8s.io/v1alpha1
        kubeConfigFile: /dev/null
        kind: WebhookAdmission
    ValidatingAdmissionWebhook:
      configuration:
        apiVersion: apiserver.config.k8s.io/v1alpha1
        kubeConfigFile: /dev/null
        kind: WebhookAdmission

在同级目录中执行命令,将配置补充道yaml中并重启对应服务

$ cp -p master-config.yaml master-config.yaml.prepatch
$ oc ex config patch master-config.yaml.prepatch -p "$(cat master-config.patch)" > master-config.yaml
$ master-restart api
$ master-restart controllers

安装步骤
安装模式
  • 宽容模式:
    • 适合场景:集群中只有部分服务需要被istio监管
    • 安装命令:
    $ kubectl apply -f install/kubernetes/istio-demo.yaml   --k8s
    $ oc apply -f install/kubernetes/istio-demo.yaml        --openshift
    
  • 严格模式:
    • 适合场景:集群中所有的服务都需要被istio监管
    • 安装命令:
    $ kubectl apply -f install/kubernetes/istio-demo-auth.yaml  --k8s
    $ oc apply -f install/kubernetes/istio-demo-auth.yaml       --openshift
    
修改部署文件

在离线环境中,istio-demo.yaml使用的镜像都需要独立提取,tag成本地镜像后修改yaml中的镜像名称,注意一点有一个镜像是通过json拼装的镜像,该镜像是docker.io/istio/proxy_init:1.2.0

  • 拼装方式:
{{- if contains "/" .Values.global.proxy_init.image }}
        image: "{{ .Values.global.proxy_init.image }}"
      {{- else }}
        image: "{{ .Values.global.hub }}/{{ .Values.global.proxy_init.image }}:{{ .Values.global.tag }}"
      {{- end }}

需要把Values.global.hub替换为:<本地镜像仓库地址>/istio

还需要将Values.global.proxy.privileged修改为true开启特权模式,具体原因见下文注意事项

确认部署结果
  1. 确认服务都已经部署,并具有各自的cluster-ip
$ kubectl get svc -n istio-system
$ oc get svc -n istio-system
  1. 确认必要的pod都已经创建,切其status的值为running (其中cleanup、install节点都是安装使用的节点状态为completed)
kubectl get pods -n istio-system
oc get pods -n istio-system

环境变量
外部负载平衡器模式
  • 需要先确认当前集群是否支持在外部负载平衡器的环境运行
$ kubectl get svc istio-ingressgateway -n istio-system

如果返回值中的cluster-ip存在值,则代表环境具有可用于入口网关的外部负载平衡器。如果值为或者则代表不支持外部负载平衡器,这种情况下只能选择nodeport模式

  • 设置Ingress IP和端口(openshift将kubectl替换为oc)
export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].port}')
nodeport模式
  • 配置Ingress端口(openshift将kubectl替换为oc)
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}')
  • 配置Ingress的IP
    不同的集群的配置方式不同(配置地址
    大部分环境使用(openshift将kubectl替换为oc):
export INGRESS_HOST=$(kubectl get po -l istio=ingressgateway -n istio-system -o jsonpath='{.items[0].status.hostIP}')
配置GATEWAY_URL
  • GATEWAY_URL目前看是bookinfo测试项目使用的变量,实际上就是提取了服务的访问地址。后面看到Gateway再判断是否需要配置该变量,暂留。
$ export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT

注意事项

  • 这里还有一个需要着重注意的地方,istio会在pod启动节点插入一个init任务,使用iptables将pod的流量全部拦截来控制pod的调度。而部分集群中,这种操作是需要特权模式的,如果不配置会出现init阶段不断地报错重启。
    • 具体表现:使用oc logs -f [podname] -c istio-init 中能看到iptables的问题 istio no chain/target/match by that name
    • 解决方法:修改istio-demo.yaml中的configmap内容,将Values.global.proxy.privileged修改为true开启特权模式
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值