kubernetes - 在kubernetes部署中配置Varnish后端

标签 kubernetes configuration varnish varnish-vcl varnish-4

我正在尝试旋转Varnish实例,以加快服务的缓慢但静态的端点。该服务已经在Kubernetes集群中运行,因此我将设置基于官方docker镜像,并遵循将VCL文件烘焙到镜像中的建议:

FROM varnish:6.2

COPY default.vcl /etc/varnish/
我从default.vcl中的少量配置开始:
vcl 4.0;

backend default {
        .host = "172.17.0.1:8018"; # IP for local experimentation
}

# only cache '/v1/xyz/...'
sub vcl_recv {
    if (req.url ~ "^/v1/xyz/") {
        return (hash);
    }
    return (pass);
}
我希望能够使用env vars或cli args在部署文件中声明目标后端。-b标志似乎很适合这项工作,但Error: Only one of -b or -f can be specified失败。
并且在std.getenv块中使用backend也不起作用:
import std;

backend default {
        .host = std.getenv("VARNISH_TAGET_HOST");
}
结果是
Expected CSTR got 'std'
(program line 369), at
('/etc/varnish/default.vcl' Line 6 Pos 17)
        .host = std.getenv("VARNISH_TAGET_HOST");
----------------###------------------------------
是否可以通过某种方式(不包括类似sed的hacks)来配置后端而无需将其硬编码到VCL中?

最佳答案

Varnish Enterprise具有动态后端
Varnish Cache是​​Varnish的开源版本,仅允许静态后端定义。
即时定义后端的唯一方法是使用软件的商业版本Varnish Enterprise。
有关动态后端功能的更多信息,请参见https://docs.varnish-software.com/varnish-cache-plus/vmods/goto/
为什么-b和-f无法合并
显然,-b参数是以下命令的简写:

varnishadm vcl.inline boot << EOF
vcl 4.1;

backend default {
    .host = "<addr>";
}
EOF
因此,实际上-b已经在后台创建并加载了VCL,这使得该选项与-f互斥

关于kubernetes - 在kubernetes部署中配置Varnish后端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65063960/

相关文章:

Git 错误 : Permission to user1/repoA. git 拒绝 user2

c# - 使用 C# 中的配置文件配置 SAP .NET Connector for SNC

logstash - 如何获得总结的 Varnishlog

drupal + Varnish 更改 session cookie

kubernetes - FailedCreatePodSandBox & kubelet, $(Slave name) Pod sandbox changed, 它将被杀死并重新创建

kubernetes - 在现有 Azure AKS 集群上启用集群自动缩放器

kubernetes - Kubernetes 的模板字段是什么

java - 如何枚举Spring java配置类?

caching - 维护包含 ESI 的请求的 session

kubernetes - 如何使用pvc创建postgres Helm 图