这里是Istio Newbie,
我正在使用Istio(版本1.3.0)进行首次测试。大多数事情运行起来都很轻松。我遇到的问题是与清漆进行对话以清理缓存的服务。该服务向无头服务后面的每个pod发出HTTP请求,失败时出现HTTP 400(错误请求)错误。该请求使用HTTP方法“ BAN”,我认为这是问题的根源,因为其他请求方法可以达到清漆而没有问题。
作为临时解决方法,我将端口名从http更改为varnish,然后一切又重新开始工作了
我使用1.3.0的头盔图表安装了istio:
helm install istio install/kubernetes/helm/istio --set kiali.enabled=true --set global.proxy.accessLogFile="/dev/stdout" --namespace istio-system --version 1.3.0
在GKE 1.13.9-gke.3上运行,并且Varnish为6.2版
使用以下定义,我可以在没有mTLS的情况下使用Istio使其工作:
ConfigMap
仅允许pod和服务CIDR用于BAN请求,并期望它们来自Varnish服务FQDN。
apiVersion: v1
kind: ConfigMap
metadata:
name: varnish-configuration
data:
default.vcl: |
vcl 4.0;
import std;
backend default {
.host = "varnish-service";
.port = "80";
}
acl purge {
"localhost";
"10.x.0.0"/14; #Pod CIDR
"10.x.0.0"/16; #Service CIDR
}
sub vcl_recv {
# this code below allows PURGE from localhost and x.x.x.x
if (req.method == "BAN") {
if (!client.ip ~ purge) {
return(synth(405,"Not allowed."));
}
return (purge);
}
}
部署
apiVersion: apps/v1
kind: Deployment
metadata:
name: varnish
spec:
replicas: 1
selector:
matchLabels:
app: varnish
template:
metadata:
labels:
app: varnish
spec:
containers:
- name: varnish
image: varnish:6.3
ports:
- containerPort: 80
name: varnish-port
imagePullPolicy: IfNotPresent
volumeMounts:
- name: varnish-conf
mountPath: /etc/varnish
volumes:
- name: varnish-conf
configMap:
name: varnish-configuration
服务
apiVersion: v1
kind: Service
metadata:
name: varnish-service
labels:
workload: varnish
spec:
selector:
app: varnish
ports:
- name: varnish-port
protocol: TCP
port: 80
targetPort: 80
部署这些功能后,您可以运行启用了cURL的pod:
kubectl run bb-$RANDOM --rm -i --image=yauritux/busybox-curl --restart=Never --tty -- /bin/sh
然后,从tty
中尝试将其卷曲:
curl -v -X BAN http://varnish-service
从这里,您将得到200 purged
或405 Not allowed
。无论哪种方式,您都可以在网格上打上光油盒。
您的问题可能与群集中的mTLS有关。您可以通过发出以下命令来检查它是否已启用*:
istioctl authn tls-check $(k get pod -l app=varnish -o jsonpath={.items..metadata.name}) varnish-service.default.svc.cluster.local
*该命令假定您正在使用本文中共享的定义。如果没有,您可以进行相应的调整。
我两次测试了此运行的GKE:一个通过Helm安装使用开源Istio,另一个通过Google管理的Istio安装(在许可模式下)。