Kubernetes Ingress

此任务描述如何使用 Kubernetes Ingress 为 Istio 配置入口网关以暴露服务网格集群内的服务。

准备工作

请按照入口网关任务中的 准备工作确定 Ingress IP 和端口的说明进行操作。

使用 Ingress 资源配置入口网关

Kubernetes Ingress 公开了从集群外到集群内服务的 HTTP 和 HTTPS 路由。

让我们看看如何在端口 80 上配置 Ingress 以实现 HTTP 流量。

  1. 创建 Ingress 资源和 IngressClass

    $ kubectl apply -f - <<EOF apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: istio spec: controller: istio.io/ingress-controller --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress spec: ingressClassName: istio rules: - host: httpbin.example.com http: paths: - path: /status pathType: Prefix backend: service: name: httpbin port: number: 8000 EOF

    IngressClass 资源向 Kubernetes 标识 Istio 网关控制器, ingressClassName: istio 值指示 Kubernetes Istio 网关控制器应该处理以下 Ingress

    旧版本的 Ingress API 使用 kubernetes.io/ingress.class 注解, 虽然它仍然有效,但它在 Kubernetes 中已被弃用一段时间了。

  2. 使用 curl 访问 httpbin 服务:

    $ curl -s -I -HHost:httpbin.example.com "http://$INGRESS_HOST:$INGRESS_PORT/status/200"
    ... HTTP/1.1 200 OK ... server: istio-envoy ...

    注意,您需要使用 -H 标志将 Host 的 HTTP 头设置为 “httpbin.example.com”, 因为 Ingress 中已经配置为处理访问 “httpbin.example.com” 的请求,但是在测试环境中, 该 host 并没有相应的 DNS 绑定。

  3. 访问未显式公开的其他 URL 时,将返回 HTTP 404 错误:

    $ curl -s -I -HHost:httpbin.example.com "http://$INGRESS_HOST:$INGRESS_PORT/headers"
    HTTP/1.1 404 Not Found ...

下一步

TLS

Ingress 支持指定 TLS 设置。 Istio 支持此功能,但是引用的 Secret 必须存在于 istio-ingressgateway 部署的命名空间(通常是 istio-system)中。 cert-manager 可用于生成这些证书。

指定路径类型

Istio 默认路径类型为精确匹配,除非路径以 /*.* 结尾,在这种情况下, 路径类型为前缀匹配。不支持其他正则表达式。

在 Kubernetes 1.18 中,添加了一个新字段 pathType。这允许将路径明确声明为 ExactPrefix

清除

删除 IngressClassIngress 配置,然后关闭 httpbin 服务:

Zip
$ kubectl delete ingress ingress $ kubectl delete ingressclass istio $ kubectl delete --ignore-not-found=true -f samples/httpbin/httpbin.yaml
这些信息有用吗?
您是否有更多建议和改进意见?

感谢您的反馈!