Ingress
本指南介绍如何在 kind 集群上设置 ingress。
设置 Ingress 控制器 🔗︎
在创建集群时,我们可以利用 KIND 的 extraPortMapping
配置选项将端口从主机转发到运行在节点上的 Ingress 控制器。
我们还可以使用 kubeadm InitConfiguration
中的 node-labels
设置自定义节点标签,供 Ingress 控制器 nodeSelector
使用。
- 创建集群
- 部署 Ingress 控制器,我们在此记录 Ingress NGINX,但其他 Ingress 也可能有效,包括 Contour 和 Kong,如果您选择使用它们,请遵循其文档。
注意:您可能还想考虑使用 Gateway API 而不是 Ingress。Gateway API 有一个 Ingress 迁移指南。
您可以使用 blixit 来测试 kind 中的 Gateway API https://github.com/kubernetes-sigs/blixt#usage
创建集群 🔗︎
使用 extraPortMappings
和 node-labels
创建 kind 集群。
- extraPortMappings 允许本地主机通过端口 80/443 向 Ingress 控制器发出请求
- node-labels 仅允许 Ingress 控制器运行在与标签选择器匹配的特定节点上
|
Ingress NGINX 🔗︎
|
清单包含特定于 kind 的补丁,用于将主机端口转发到 Ingress 控制器,设置污点容忍度并将其调度到自定义标记的节点。
现在 Ingress 已全部设置完毕。等待其准备好处理运行的请求
|
有关基本示例用法,请参阅 使用 Ingress。
使用 Ingress 🔗︎
以下示例创建简单的 http-echo 服务和一个 Ingress 对象,用于路由到这些服务。
注意,此示例使用 nginx 特定的 Ingress 注释,该注释可能不被所有 Ingress 实现支持。
kind: Pod
apiVersion: v1
metadata:
name: foo-app
labels:
app: foo
spec:
containers:
- command:
- /agnhost
- netexec
- --http-port
- "8080"
image: registry.k8s.io/e2e-test-images/agnhost:2.39
name: foo-app
---
kind: Service
apiVersion: v1
metadata:
name: foo-service
spec:
selector:
app: foo
ports:
# Default port used by the image
- port: 8080
---
kind: Pod
apiVersion: v1
metadata:
name: bar-app
labels:
app: bar
spec:
containers:
- command:
- /agnhost
- netexec
- --http-port
- "8080"
image: registry.k8s.io/e2e-test-images/agnhost:2.39
name: bar-app
---
kind: Service
apiVersion: v1
metadata:
name: bar-service
spec:
selector:
app: bar
ports:
# Default port used by the image
- port: 8080
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
rules:
- http:
paths:
- pathType: Prefix
path: /foo(/|$)(.*)
backend:
service:
name: foo-service
port:
number: 8080
- pathType: Prefix
path: /bar(/|$)(.*)
backend:
service:
name: bar-service
port:
number: 8080
---
应用内容
|
现在验证 Ingress 是否有效
|