Ingress是Kubernetes集群中一种API对象,属于网络路由和负载均衡中的一个概念。它的主要作用是将外部的流量路由到集群内部的服务,您可以通过Ingress资源来配置不同的转发规则,从而根据不同的规则设置访问集群内不同的Service所对应的后端Pod。本文将介绍如何通过控制台和Kubectl方式创建、查看、更新和删除Ingress。
前提条件
确保您已经创建SCE集群,具体操作请参阅创建SCE集群。
方式一:控制台操作指导
创建Ingress
- 登录云容器引擎控制台。
- 在控制台的左侧导航栏中点击“集群” 。
- 在集群列表页面中,单击目标集群的名称进入集群详情界面。
- 在集群管理页面的左侧导航栏中,选择“网络” ,然后单击“路由” 。
- 单击路由页面左上角的“创建路由” ,跳转到创建Ingress页面。创建路由时,整体上可以分为生产Ingress和灰度Ingress 。
- 创建灰度Ingress :
- 在流量切换方式中选择灰度 。
- 选择命名空间,创建灰度Ingress时必须关联⼀个生产Ingress,用于实现生产Ingress和灰度Ingress之间的流量切换。
- 选择流量切换方式,可以选灰度或者蓝绿 。
- 选择灰度后,支持两种转发方式:Header和Cookie。
- Header :根据http请求的头部中是否包含指定key-value来选择将请求转发到生产Ingress还是灰度 Ingress。
- Cookie :根据http请求的Cookie中是否包含指定key-value来选择将请求转发到生产Ingress还是灰度Ingress,Cookie转发时无法更改value和匹配方式。
- 选择蓝绿后,蓝绿转发可以选择转发到生产Ingress和灰度Ingress的流量权重:
- 全部切到生产:将请求全部转发到生产Ingress。
- 全部切到灰度:将请求全部转发到灰度Ingress 。
- 自定义百分比:如30%表示将30%的请求转发到灰度Ingress,70%的请求转发到生产Ingress。
- 创建生产Ingress :
- 在灰度Ingress选项中选择否 。
- 填写域名路径规则,包括协议、域名、路径、服务名称以及服务端口等信息,支持添加多个规格。
管理Ingress
- 登录云容器引擎控制台。
- 在控制台的左侧导航栏中点击“集群” 。
- 在集群列表页面中,单击目标集群的名称进入集群详情界面。
- 在集群管理页面的左侧导航栏中,选择“网络” ,然后单击“路由” 。
- 在路由详情页面中,可以在目标路由的操作列中进行更新、删除以及查看YAML等操作。
- 在路由详情页面中可以查看所有已经创建路由,点击目标路由名称可进一步看到该路由详情。
方式二:Kubectl操作指导
创建Ingress
- 创建 test-ingress.yaml文件,示例内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: nginx:latest
ports:
- name: http
containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
selector:
app: my-app
ports:
- name: http
port: 8080
targetPort: 8080
type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app-ingress
spec:
rules:
- host: my-app.example.com
http:
paths:
- path: /my-app/
pathType: Prefix
backend:
service:
name: my-app-service
port:
number: 8080
- 执行以下命令对相关对象进行创建。
kubectl apply -f test-ingress.yaml
查看Ingress
执行以下命令查看Ingress。
kubectl get ingress
更新Ingress
执行以下命令更新Ingress。
kubectl edit ingress my-app-ingress
删除Ingress
执行以下命令删除Ingress。
kubectl delete ingress my-app-ingress