准备环境
本页面介绍如何通过创建 Kubernetes Ingress 对象来配置外部 HTTP(S) 负载平衡器。一个 Ingress 对象必须与一个或多个 Service 对象相关联,每个 Service 对象与一组 Pod 相关联。
一个 Service 对象具有一个或多个 servicePort 结构。Ingress 定位的每个 servicePort 都与一个 Google Cloud 后端服务资源相关联。
在开始之前,我们要确认已启用 Google Kubernetes Engine API。
多个后端服务
HTTP(S) 负载平衡器提供一个稳定的 IP 地址,您可以使用该 IP 地址将请求路由到各个后端服务。
在此练习中,您将配置负载平衡器,以根据网址路径将请求路由到不同的后端服务。具有路径的请求将路由到一个后端服务,具有路径 /kube 的请求将路由到另一个后端服务。
以下简要介绍此练习中的步骤:
以下是第一个 Deployment 的清单:
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-world-deployment
spec:
selector:
matchLabels:
greeting: hello
department: world
replicas: 3
template:
metadata:
labels:
greeting: hello
department: world
spec:
containers:
- name: hello
image: "gcr.io/google-samples/hello-app:2.0"
env:
- name: "PORT"
value: "50000"
将此清单复制到名为 hello-world-deployment.yaml 的文件,然后创建该 Deployment:
kubectl apply -f hello-world-deployment.yaml
以下是公开第一个 Deployment 的 Service 的清单:
apiVersion: v1
kind: Service
metadata:
name: hello-world
spec:
type: NodePort
selector:
greeting: hello
department: world
ports:
- protocol: TCP
port: 60000
targetPort: 50000
在此次实操中,我们需要理解有关 Service 的以下重要事项:
Ingress 的 path 字段唯一支持的通配符是 * 字符。* 字符必须紧跟在正斜线 (/) 之后,并且必须是格式中的最后一个字符。例如,/*、/foo/*、/foo/bar/* 是有效格式,但 *、/foo/bar*、/foo/*/bar 不是有效格式。较具体的格式优先于不太具体的格式。如果您同时拥有 /foo/* 和 /foo/bar/*,则选择 /foo/bar/bat 来匹配 /foo/bar/*。
如需详细了解路径限制和格式匹配,请参阅网址映射文档。
网址映射文档:https://cloud.google.com/load-balancing/docs/url-map
将此清单复制到名为 hello-world-service.yaml 的文件,然后创建该 Service:
kubectl apply -f hello-world-service.yaml
以下是第二个 Deployment 的清单。
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-kubernetes-deployment
spec:
selector:
matchLabels:
greeting: hello
department: kubernetes
replicas: 3
template:
metadata:
labels:
greeting: hello
department: kubernetes
spec:
containers:
- name: hello-again
image: "gcr.io/google-samples/node-hello:1.0"
env:
- name: "PORT"
value: "8080"
将此清单复制到名为 hello-kubernetes-deployment.yaml 的文件,然后创建该 Deployment:
kubectl apply -f hello-kubernetes-deployment.yaml
以下是公开第二个 Deployment 的 Service 的清单:
apiVersion: v1
kind: Service
metadata:
name: hello-kubernetes
spec:
type: NodePort
selector:
greeting: hello
department: kubernetes
ports:
- protocol: TCP
port: 80
targetPort: 8080
在此次实操实验中,我们还需要理解有关 Service 的以下重要事项:
将此清单复制到名为 hello-kubernetes-service.yaml 的文件,然后创建该 Service:
kubectl apply -f hello-kubernetes-service.yaml
以下是 Ingress 的清单:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- http:
paths:
- path: /*
backend:
serviceName: hello-world
servicePort: 60000
- path: /kube
backend:
serviceName: hello-kubernetes
servicePort: 80
请注意,Ingress 清单有两个 (serviceName, servicePort) 对。每个 (serviceName, servicePort) 都与一个 Google Cloud 后端服务相关联。
将此清单复制到名为 my-ingress.yaml 的文件,然后创建该 Ingress:
当客户端将请求发送到网址路径为 /kube 的负载平衡器时,请求将被转发到端口 80 上的 hello-kubernetes Service。
请等待 5 分钟左右,让负载平衡器完成配置。
查看 Ingress:
kubectl get ingress my-ingress --output yaml
输出显示 HTTP(S) 负载平衡器的外部 IP 地址:
status:
loadBalancer:
ingress:
- ip: 35.244.129.17
测试 / 路径:
curl 35.244.129.17
其中 load-balancer-ip 是负载平衡器的外部 IP 地址。
输出结果会显示 Hello, world! 消息:
Hello,world!
Version:2.0.0
Hostname:hello-world-deployment-68c58989bb-tpl8m
测试 /kube 路径:
curl 35.244.129.17/kube
输出结果会显示 Hello Kubernetes 消息:
Hello Kubernates!
WebEye 是中国大陆地区首家获得 Google Cloud MSP 资质的合作伙伴。点击了解:企业上云服务。
WebEye 为全球企业提供⼀站式数字媒体营销解决方案、增长效率工具平台、云服务、安全合规、游戏发行服务。我们汇集全球优质的移动营销资源,用大数据精准决策,用AI管理创意素材,用智能化平台实现聚合广告投放。WebEye云计算服务与多云管理平台、安全合规服务助力企业全面数字化转型。子品牌ModooPlay为国内外游戏开发者提供全渠道、一站式的游戏发行服务。