Knative 与 Istio 整合:利用 Istio 网关实现 Serverless 服务的外部访问
1. 核心原理
Knative Serving 默认创建仅集群内可访问的服务。通过 Istio 网关:
- Istio 的
Ingress Gateway作为流量入口 - Knative 自动生成
VirtualService路由规则 - 外部流量路径:客户端 → Istio 网关 → Knative 服务
2. 前提条件
- 已安装 Knative Serving 和 Istio
- 确认 Istio 网关服务状态:
kubectl get svc -n istio-system istio-ingressgateway
3. 配置步骤
(1) 启用 Istio 网络层
修改 Knative 网络配置:
# config-network.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: config-network
namespace: knative-serving
data:
ingress.class: "istio.ingress.networking.knative.dev"
应用配置:
kubectl apply -f config-network.yaml
(2) 部署 Knative 服务
示例服务定义:
# knative-service.yaml
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: my-serverless-app
spec:
template:
spec:
containers:
- image: gcr.io/knative-samples/helloworld-go
(3) 验证服务路由
检查生成的 VirtualService:
kubectl get virtualservice -l serving.knative.dev/service=my-serverless-app
4. 外部访问配置
方案 1:通过负载均衡器 IP
- 获取网关外部 IP:
export GATEWAY_IP=$(kubectl get svc istio-ingressgateway -n istio-system -o jsonpath="{.status.loadBalancer.ingress[0].ip}") - 访问服务:
curl -H "Host: my-serverless-app.default.example.com" http://$GATEWAY_IP
方案 2:自定义域名
- 配置 DNS 解析:
echo "$GATEWAY_IP myapp.example.com" >> /etc/hosts - 在 Knative 服务添加域名注解:
metadata: annotations: networking.knative.dev/visibility: "external"
5. 流量管理示例
实现金丝雀发布:
# 修改 Knative Service
spec:
traffic:
- revisionName: my-serverless-app-00001
percent: 80
- revisionName: my-serverless-app-00002
percent: 20
6. 验证结果
- 检查外部访问:
curl -v http://myapp.example.com - 监控网关指标:
kubectl exec -n istio-system deploy/istiod -- pilot-agent request GET /metrics
7. 故障排除
| 问题现象 | 检查点 |
|---|---|
| 503 错误 | 确认 istio-ingressgateway Pod 状态 |
| 404 错误 | 验证 VirtualService 中的 host 配置 |
| 连接超时 | 检查防火墙对网关端口的放行规则 |
关键注意事项
- 确保 Istio 版本 ≥ 1.4(兼容 Knative 0.15+)
- 生产环境建议启用 TLS:
# Gateway 中配置 servers: - port: number: 443 protocol: HTTPS tls: mode: SIMPLE credentialName: my-cert- 使用
knCLI 简化操作:kn service create myapp --image my-registry/app:v1
通过以上配置,Knative Serverless 服务即可通过 Istio 网关安全高效地对外提供服务,同时保留自动扩缩容和版本管理等原生能力。
Knative通过Istio网关实现外访
786

被折叠的 条评论
为什么被折叠?



