Kubernetes Ingress
本任务介绍如何使用 Kubernetes Ingress 资源将 Istio 配置为在服务网格集群外部公开服务。
开始之前
请按照 开始之前 和 确定入口 IP 和端口 部分中的说明进行操作 Ingress 网关任务。
使用 Ingress 资源配置入口
Kubernetes Ingress 资源 将来自集群外部的 HTTP 和 HTTPS 路由暴露给集群内的服务。
让我们看看如何为 HTTP 流量在端口 80 上配置 Ingress
。
创建
Ingress
资源$ kubectl apply -f - <<EOF apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: istio name: ingress spec: rules: - host: httpbin.example.com http: paths: - path: /status pathType: Prefix backend: service: name: httpbin port: number: 8000 EOF
kubernetes.io/ingress.class
注解是必需的,它告诉 Istio 网关控制器应该处理此Ingress
,否则将被忽略。使用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”,但在您的测试环境中,您没有该主机的 DNS 绑定,只是将您的请求发送到入口 IP。访问任何尚未明确暴露的 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
。这允许明确地将路径声明为Exact
或Prefix
。
指定IngressClass
在 Kubernetes 1.18 中,添加了一个新资源IngressClass
,它取代了Ingress
资源上的kubernetes.io/ingress.class
注解。如果您使用此资源,您需要将controller
字段设置为istio.io/ingress-controller
。例如
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: /
pathType: Prefix
backend:
service:
name: httpbin
port:
number: 8000
清理
删除Ingress
配置,并关闭httpbin服务
$ kubectl delete ingress ingress
$ kubectl delete --ignore-not-found=true -f @samples/httpbin/httpbin.yaml@