Kubernetes Ingress
此任务描述如何使用Ingress Resource入口资源将 Istio 配置为在服务网格集群之外公开服务。
准备工作
请按照Ingress 网关任务中的准备工作、确定 Ingress IP 和端口的说明进行操作。
使用Ingress resource配置ingress
Kubernetes Ingress 资源公开了从集群外到集群内服务的 HTTP 和 HTTPS 路由。
让我们看看如何在端口80上配置 Ingress
以实现 HTTP 流量。
创建一个
Ingress
资源:$ kubectl apply -f - <<EOF apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: istio name: ingress spec: rules: - host: httpbin.example.com http: paths: - path: /status/* backend: serviceName: httpbin servicePort: 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 header 设置为"httpbin.example.com",因为Ingress
中已经配置为处理访问 “httpbin.example.com"的请求,但是在测试环境中,该 host 并没有相应的 DNS 绑定。访问未显式公开的其他 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/v1beta1
kind: IngressClass
metadata:
name: istio
spec:
controller: istio.io/ingress-controller
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress
spec:
ingressClassName: istio
rules:
- host: httpbin.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: httpbin
servicePort: 8000
清除
删除 Ingress
配置,然后关闭 httpbin服务:
$ kubectl delete ingress ingress
$ kubectl delete --ignore-not-found=true -f @samples/httpbin/httpbin.yaml@