部署Kubernetes - Istio
参考
部署
-
安装
curl -L https://git.io/getLatestIstio | sh -
解压进入目录
export PATH=$PWD/bin:$PATH
安装Istio而不启用侧车间的相互TLS认证。为具有现有应用程序的群集,使用Istio辅助车的服务需要能够与其他非Istio Kubernetes服务以及使用活动性和准备就绪探测器,无头服务或StatefulSets的应用程序通信的应用程序选择此选项。
kubectl apply -f install/kubernetes/istio.yaml
安装Istio并启用侧柜之间的相互TLS认证。
kubectl apply -f install/kubernetes/istio-auth.yaml
这两个选项都会创建istio-system命名空间以及所需的RBAC权限,并部署Istio-Pilot,Istio-Mixer,Istio-Ingress和Istio-CA(证书颁发机构)。
可选:如果您的群集的Kubernetes版本是1.9或更高,并且您希望启用自动代理注入,请安装sidecar injector webhook。 验证安装 请确保以下Kubernetes服务部署:istio-pilot,istio-mixer,istio-ingress。kubectl get svc -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE istio-ingress LoadBalancer 10.104.133.203 <pending> 80:31411/TCP,443:31944/TCP 19h istio-mixer ClusterIP 10.110.159.37 <none> 9091/TCP,15004/TCP,9093/TCP,9094/TCP,9102/TCP,9125/UDP,42422/TCP 1d istio-pilot ClusterIP 10.109.170.9 <none> 15003/TCP,15005/TCP,15007/TCP,15010/TCP,8080/TCP,9093/TCP,443/TCP 1d istio-sidecar-injector ClusterIP 10.109.227.123 <none> 443/TCP 1h
确保相应Kubernetes容器都运行起来:istio-pilot-、istio-mixer-、istio-ingress-、istio-ca-,和可选的istio-sidecar-injector-*。
kubectl get pods -n istio-system
NAME READY STATUS RESTARTS AGE istio-ca-75fb7dc8d5-6v27b 1/1 Running 2 1d istio-ingress-7966684d69-xm966 1/1 Running 2 19h istio-mixer-566f68f5d6-wckqq 3/3 Running 6 1d istio-pilot-fd8fb6957-4c5hj 2/2 Running 4 1d istio-sidecar-injector-844b9d4f86-58nd9 1/1 Running 0 1h
-
安装 Istio sidecar
Pod Spec 中需满足的条件
为了成为 Service Mesh 中的一部分,kubernetes 集群中的每个 Pod 都必须满足如下条件:
- Service 关联:每个 pod 都必须只属于某一个 Kubernetes Service (当前不支持一个 pod 同时属于多个 service)。
-
命名的端口:Service 的端口必须命名。端口的名字必须遵循如下格式
<protocol>[-<suffix>]
,可以是http、http2、 grpc、 mongo、 或者 redis 作为<protocol>
,这样才能使用 Istio 的路由功能。例如name: http2-foo
和name: http
都是有效的端口名称,而name: http2foo
不是。如果端口的名称是不可识别的前缀或者未命名,那么该端口上的流量就会作为普通的 TCP 流量来处理(除非使用Protocol: UDP
明确声明使用 UDP 端口)。 -
带有 app label 的 Deployment:我们建议 kubernetes 的
Deploymenet
资源的配置文件中为 Pod 明确指定app
label。每个 Deployment 的配置中都需要有个与其他 Deployment 不同的含有意义的app
label。app
label 用于在分布式追踪中添加上下文信息。 -
Mesh 中的每个 pod 里都有一个 Sidecar:最后,Mesh 中的每个 pod 都必须运行与 Istio 兼容的 sidecar。以下部分介绍了将 sidecar 注入到 pod 中的两种方法:使用
istioctl
命令行工具手动注入,或者使用 Istio Initializer 自动注入。注意 sidecar 不涉及到流量,因为它们与容器位于同一个 pod 中。
a) 生成证书
./install/kubernetes/webhook-create-signed-cert.sh
--service istio-sidecar-injector
--namespace istio-system
--secret sidecar-injector-certsb) 安装 sidecar 注入的 configmap
kubectl apply -f install/kubernetes/istio-sidecar-injector-configmap-release.yaml
c) 设置安装 yaml 中 webhook 的 caBundle,以便 api-server能够用来调用 webhook
cat install/kubernetes/istio-sidecar-injector.yaml |
./install/kubernetes/webhook-patch-ca-bundle.sh >
install/kubernetes/istio-sidecar-injector-with-ca-bundle.yamld) 安装 sidecar 注册器 webhook
kubectl apply -f install/kubernetes/istio-sidecar-injector-with-ca-bundle.yaml
-
部署应用
前置条件
kubernetes 1.9 的集群需要启动
admissionregistration.k8s.io/v1beta1
。kubectl api-versions | grep admissionregistration.k8s.io/v1beta1
admissionregistration.k8s.io/v1beta1
如果您启动了Istio-sidecar-injector,如上所示,您可以直接使用应用程序部署应用程序kubectl create。
kubectl get namespace -L istio-injection
NAME STATUS AGE ISTIO-INJECTION default Active 4d enabled istio-system Active 1d kube-public Active 4d kube-system Active 4d
Istio Sidecar注入器会自动将Envoy容器注入到您的应用程序窗格中,假设运行在标有名称空间的名称空间中istio-injection=enabled
kubectl label namespace <namespace> istio-injection=enabled
kubectl create -n <namspace> -f <your-app-spec>.yaml
如果您没有安装Istio-sidecar-injector,则在部署它们之前,必须使用istioctl kube-inject将Envoy容器手动注入应用程序窗格中:
kubectl create -f <(istioctl kube-inject -f <your-app-spec>.yaml)
-
卸载
如果您启用Istio-sidecar-injector,请将其卸载:
kubectl delete -f install/kubernetes/istio-sidecar-injector-with-ca-bundle.yaml
a)如果您在禁用相互TLS身份验证的情况下安装了Istio:
kubectl delete -f install/kubernetes/istio.yaml
b)如果您在启用相互TLS身份验证的情况下安装了Istio:
kubectl delete -f install/kubernetes/istio-auth.yaml