我有一个已安装Istio插件的现有GKE集群,例如:
gcloud beta container clusters create istio-demo \
--addons=Istio --istio-config=auth=MTLS_PERMISSIVE \
--cluster-version=[cluster-version] \
--machine-type=n1-standard-2 \
--num-nodes=4
我正在跟踪this guide来安装cert-manager
,以便从Let's Encrypt自动供应TLS证书。根据指南,Istio需要启用SDS,这可以在安装时完成:
helm install istio.io/istio \
--name istio \
--namespace istio-system \
--set gateways.istio-ingressgateway.sds.enabled=true
由于我已经通过GKE安装了Istio,如何在现有群集上启用SDS?另外,是否可以使用gcloud
CLI在集群创建时启用SDS?
答案 0 :(得分:2)
每个设计的受管Istio将还原任何自定义配置,并再次禁用SDS。因此,恕我直言,这是一个无用的情况。您可以在此guide之后手动启用SDS,但请记住,该配置将仅在2-3分钟内保持活动状态。
当前,当从头开始创建集群时,GKE不支持启用SDS。在GKE托管的Istio上,Google希望拥有enable SDS on GKE clusters的功能,但该版本尚未提供ETA。
但是,如果您使用非托管(开源)Istio,则Istio roadmap中包含SDS功能,我认为它应该在1.2版中可用,但这不是保证。
答案 1 :(得分:1)
根据卡洛斯的回答,我决定不使用Istio on GKE
插件,因为在将Istio用作托管服务时,自定义功能非常有限。
我创建了一个标准的GKE集群...
gcloud beta container clusters create istio-demo \
--cluster-version=[cluster-version] \
--machine-type=n1-standard-2 \
--num-nodes=4
然后手动安装Istio ...
kubectl create namespace istio-system
helm template install/kubernetes/helm/istio-init --name istio-init --namespace istio-system | kubectl apply -f -
helm template install/kubernetes/helm/istio --name istio --namespace istio-system \
--set gateways.enabled=true \
--set gateways.istio-ingressgateway.enabled=true \
--set gateways.istio-ingressgateway.sds.enabled=true \
--set gateways.istio-ingressgateway.externalTrafficPolicy="Local" \
--set global.proxy.accessLogFile="/dev/stdout" \
--set global.proxy.accessLogEncoding="TEXT" \
--set grafana.enabled=true \
--set kiali.enabled=true \
--set prometheus.enabled=true \
--set tracing.enabled=true \
| kubectl apply -f -
kubectl label namespace default istio-injection=enabled
答案 2 :(得分:0)
即使当前default ingress gateway
创建的Istio on GKE
不支持SDS,您也可以手动添加自己的额外入口网关。
您可以在istio-ingressgateway
名称空间中获取默认deployment
service
和istio-system
的清单,并对其进行修改以添加SDS容器并更改名称,然后应用它到您的群集。但这有点乏味,有一种更简单的方法可以做到:
首先下载istio的开源头盔图表(选择与您在GKE上的Istio兼容的版本,以我为例,我在GKE上的Istio为1.1.3,我下载了开源istio 1.1.17,它可以正常工作):
curl -O https://storage.googleapis.com/istio-release/releases/1.1.17/charts/istio-1.1.17.tgz
# extract under current working directory
tar xzvf istio-1.1.17.tgz
然后仅渲染Ingressgateway组件的头盔模板:
helm template istio/ --name istio \
--namespace istio-system \
-x charts/gateways/templates/deployment.yaml \
-x charts/gateways/templates/service.yaml \
--set gateways.istio-egressgateway.enabled=false \
--set gateways.istio-ingressgateway.sds.enabled=true > istio-ingressgateway.yaml
然后通过以下修改手动修改渲染的istio-ingressgateway.yaml
文件:
metadata.name
更改为istio-ingressgateway-sds
之类的其他metadata.lables.istio
更改为ingressgateway-sds
之类的其他spec.template.metadata.labels
更改部署的ingressgateway-sds
spec.selector.istio
更改为与ingressgateway-sds
相同的值然后将yaml文件应用于您的GKE集群:
kubectl apply -f istio-ingressgateway.yaml
Holla!您现在已经创建了具有SDS的istio Ingressgatway,可以通过以下方式获取它的负载均衡器IP:
kubectl -n istio-system get svc istio-ingressgateway-sds
要让您的Gateway
使用启用了sds的正确入口网关,您需要将spec.selector.istio
设置为与您设置的匹配。以下是使用Kubernetes机密作为TLS证书的Gateway
资源的示例:
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: gateway-test
spec:
selector:
istio: ingressgateway-sds
servers:
- hosts:
- '*.example.com'
port:
name: http
number: 80
protocol: HTTP
tls:
httpsRedirect: true
- hosts:
- '*.example.com'
port:
name: https
number: 443
protocol: HTTPS
tls:
credentialName: example-com-cert
mode: SIMPLE
privateKey: sds
serverCertificate: sds