--class
- 指定 Ingress 从属的 Ingress Class 对象
--rule
- 指定路由规则,基本形式是URI=Service
,也就是说是访问 HTTP 路径就转发到对应的 Service 对象,再由 Service 对象转发给后端的 Pod
$ export out="--dry-run=client -o yaml"$ kubectl create ing ngx-ing --rule="ngx.test/=ngx-svc:80" --class=ngx-ink $out
apiVersion: networking.k8s.io/v1kind: Ingressmetadata:name: ngx-ingspec:ingressClassName: ngx-inkrules:- host: ngx.testhttp:paths:- backend:service:name: ngx-svcport:number: 80path: /pathType: Exact
这份 YAML 文档中有两个关键字段 ingressClassName
和 rules
,rules
的格式稍显复杂:它将路由规则拆散为 host
和 http path
,在 path
里又指定了路径的匹配方式,可以是精确匹配 Exact
或者是前缀匹配 Prefix
,再用 backend
来指定转发的目标 Service 对象 。3.2 Ingress ClassIngress Class 本身并没有什么实际的功能,只是起到联系 Ingress 和 Ingress Controller 的作用,所以它的定义非常简单,在
spec
里只有一个必需的字段 controller
,表示要使用哪个 Ingress Controller,具体的名字就要看实现文档了 。比如,要使用 Nginx 开发的 Ingress Controller,那么就要用名字
nginx.org/ingress-controller
:apiVersion: networking.k8s.io/v1kind: IngressClassmetadata:name: ngx-inkspec:controller: nginx.org/ingress-controller

文章插图
4. 使用 Ingress / Ingress Class使用
kubectl apply
创建 Ingress 和 Ingress Class 这两个对象:$ kubectl apply -f ngx-ing-class.yamlingressclass.networking.k8s.io/ngx-ink created$ kubectl apply -f ngx-ing.yamlingress.networking.k8s.io/ngx-ing created
然后我们查看 Ingress 和 Ingress Class 的状态:$ kubectl get ingress -o wideNAMECLASSHOSTSADDRESSPORTSAGEngx-ingngx-inkngx.test8067s$ kubectl get ingressclass -o wideNAMECONTROLLERPARAMETERSAGEngx-inknginx.org/ingress-controller<none>84s
可以使用 kubectl describe
查看详细的信息:$ kubectl describe ing ngx-ingName:ngx-ingLabels:<none>Namespace:defaultAddress:Ingress Class:ngx-inkDefault backend:<default>Rules:HostPathBackends----------------ngx.test/ngx-svc:80 (10.10.1.38:80,10.10.1.40:80,10.10.1.41:80)Annotations:<none>Events:<none>
可以看到 Ingress 对象的路由规则 Host/Path
就是在 YAML 里设置的域名 ngx.test/
。5. 使用 Ingress Controller准备好了 Ingress 和 Ingress Class,接下来就需要部署真正处理路由规则的 Ingress Controller 。
Nginx Ingress Controller 以 Pod 的形式运行在 Kubernetes 里 , 同时支持 Deployment 和 DaemonSet 两种部署方式 。我们现在根据 Nginx Ingress Controller Installation Docs 部署 Nginx Ingress Controller 。
在使用
kubectl
的主机上首先克隆仓库并进入部署文件夹:$ git clone https://github.com/nginxinc/kubernetes-ingress.git --branch v2.4.1$ cd kubernetes-ingress/deployments
Nginx Ingress Controller 的安装略微麻烦一些,有很多个 YAML 需要执行 , 但如果只是做简单的试验,就只需要用到 4 个 YAML:$ kubectl apply -f common/ns-and-sa.yamlnamespace/nginx-ingress createdserviceaccount/nginx-ingress created$ kubectl apply -f rbac/rbac.yamlclusterrole.rbac.authorization.k8s.io/nginx-ingress createdclusterrolebinding.rbac.authorization.k8s.io/nginx-ingress created$ kubectl apply -f common/nginx-config.yamlconfigmap/nginx-config created$ kubectl apply -f common/default-server-secret.yamlsecret/default-server-secret created
前两条命令为 Ingress Controller 创建了一个独立的名字空间 nginx-ingress
,还有相应的账号和权限,这是为了访问 apiserver 获取 Service、Endpoint 信息用的;后两条则是创建了一个 ConfigMap 和 Secret,用来配置 HTTP/HTTPS 服务 。接下来我们还需要部署一些 Custom Resources,没有它们我们部署的 Ingress Controller 就无法运行:
默认情况下 , 需要为虚拟服务器、虚拟服务器路由、传输服务器和策略创建自定义资源的定义 。否则,Ingress Controller Pod 将不会变为 Ready 状态 。如果要禁用该要求,请将-enable-custom-resources
命令行参数配置为Readyfalse
并跳过此部分 。
$ kubectl apply -f common/crds/k8s.nginx.org_policies.yamlcustomresourcedefinition.apiextensions.k8s.io/policies.k8s.nginx.org created$ kubectl apply -f common/crds/k8s.nginx.org_transportservers.yamlcustomresourcedefinition.apiextensions.k8s.io/transportservers.k8s.nginx.org created$ kubectl apply -f common/crds/k8s.nginx.org_virtualserverroutes.yamlcustomresourcedefinition.apiextensions.k8s.io/virtualserverroutes.k8s.nginx.org created$ kubectl apply -f common/crds/k8s.nginx.org_virtualservers.yamlcustomresourcedefinition.apiextensions.k8s.io/virtualservers.k8s.nginx.org created
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 弹壳特攻队推图选择哪些技能
- 苹果13promax详细参数_参数配置表
- 如何调整屏幕分辨率(分辨率1920x1080怎么设置)
- 计算机分辨率调整(调整分辨率不能满屏)
- 我的世界里怎么骑马(我的世界怎样骑马)
- 我的世界怎么骑马(我的世界马鞍的做法)
- 原神兰伊舍猜谜语答案分别是什么
- 齐博X1-栏目的调用3
- 安卓平板apk文件怎么打开(平板apk用什么打开)
- .net lambda表达式合并