Knative 与 Istio 整合:利用 Istio 网关实现 Serverless 服务的外部访问

Knative通过Istio网关实现外访

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:自定义域名
  1. 配置 DNS 解析:
    echo "$GATEWAY_IP myapp.example.com" >> /etc/hosts
    

  2. 在 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
    

  • 使用 kn CLI 简化操作:
    kn service create myapp --image my-registry/app:v1
    

通过以上配置,Knative Serverless 服务即可通过 Istio 网关安全高效地对外提供服务,同时保留自动扩缩容和版本管理等原生能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值