在实际生产环境中,保护内部服务不被未授权访问是首要任务。虽然 OAuth2、JWT 等现代认证方式更为流行,但在某些场景下(如内部工具、测试环境、遗留系统对接),Basic Authentication 依然是一种简单、高效且易于实现的方案。
本文将手把手演示如何在 Envoy Gateway 中启用 Basic Auth,并配合 Kubernetes Secret 管理凭据,为你的服务快速构建一道基础安全防线。

01 了解 Basic Auth 是怎么工作的?
Basic Auth 的逻辑非常直白:
- 客户端将
用户名:密码 拼接成字符串。
- 对该字符串进行 Base64 编码(注意:这只是编码,不是加密!)。
- 将编码后的字符串放入 HTTP 请求头:
Authorization: Basic <encoded_string>
Tip:Base64编码是可以轻松解密的,这意味着任何人都可以拿到明文的账号密码。因此,在生产环境中,必须强制使用 HTTPS 协议,否则等同于“裸奔”。
02 配置 Basic Authentication
1. 创建 .htpasswd 文件
首先,我们需要生成包含用户名和加密密码的文件。你可以使用常见的 htpasswd 工具。
# 安装 htpasswd 工具
apt install apache2-utils # Ubuntu/Debian
yum install httpd-tools # CentOS
# 创建 .htpasswd 文件
$ htpasswd -cs .htpasswd jiaxzeng
New password:
Re-type new password:
Adding password for user jiaxzeng
# 如果已有 .htpasswd 文件,更新或新增用户
$ htpasswd -s .htpasswd test
New password:
Re-type new password:
Adding password for user test
2. 创建 Kubernetes Secret
接下来,我们将上一步生成的 .htpasswd 文件创建为 Kubernetes 的 Secret 资源,以便 Envoy Gateway 可以安全地读取它。
$ kubectl create secret generic basic-auth --from-file=.htpasswd
secret/basic-auth created
3. 创建 SecurityPolicy
这是最核心的一步。我们需要定义一个遵循 Gateway API 标准的 SecurityPolicy 资源,将上一步创建的 Secret 应用到指定的 HTTPRoute 上,从而启用 Basic Auth 认证。
$ cat <<EOF | kubectl apply -f -
apiVersion: gateway.envoyproxy.io/v1alpha1
kind: SecurityPolicy
metadata:
name: basic-auth-example
spec:
targetRefs:
- group: gateway.networking.k8s.io
kind: HTTPRoute
name: simple
basicAuth:
users:
name: "basic-auth"
EOF
securitypolicy.gateway.envoyproxy.io/basic-auth-example created
03 验证
配置完成后,我们可以用 curl 命令来验证 Basic Auth 是否生效。
首先,尝试不携带认证信息访问服务:
$ curl -v -H "Host: www.simple.com" http://172.139.20.19:30874/ping && echo
* Trying 172.139.20.19:30874...
* Connected to 172.139.20.19 (172.139.20.19) port 30874
> GET /ping HTTP/1.1
> Host: www.simple.com
> User-Agent: curl/8.5.0
> Accept: */*
>
< HTTP/1.1 401 Unauthorized
< www-authenticate: Basic realm="http://www.simple.com/ping"
< content-length: 58
< content-type: text/plain
< date: Wed, 04 Mar 2026 07:10:22 GMT
<
* Connection #0 to host 172.139.20.19 left intact
User authentication failed. Missing username and password.
如你所见,服务器返回了 401 Unauthorized 状态码,并在 www-authenticate 响应头中指明了需要 Basic 认证。这正是我们期望的结果。
接着,使用正确的用户名和密码(这里用 -u 参数,curl 会自动处理 Base64 编码)再次尝试:
$ curl -v -H "Host: www.simple.com" -u jiaxzeng:your_password http://172.139.20.19:30874/ping
...
< HTTP/1.1 200 OK
...
这次应该就能成功访问,并看到后端服务返回的 200 OK 响应了。
04 结语
通过以上步骤,我们成功在 Envoy Gateway 中为服务加上了 Basic Authentication 这道基础防护。这种方式特别适合内部系统、API 网关入口或需要快速上线的安全需求。当然,如前所述,务必在 HTTPS 环境下使用以保障密码传输安全。
Envoy Gateway 的功能远不止于此。它还深度集成了 Service Mesh 的理念,支持速率限制(RateLimit)、CORS、JWT 认证、TLS 终止等高级安全与流量治理特性。更重要的是,所有这些配置都遵循标准的 Gateway API 规范,这意味着你的配置更具可移植性,能更好地融入云原生生态。掌握 Envoy Gateway 无疑会成为运维和平台工程师技能树上的重要一环。
如果你想深入了解相关技术或在实践中遇到问题,欢迎到 云栈社区 与更多开发者交流讨论。

推荐阅读(原文外链保留):