本文参照了 https://cloud.google.com/kubernetes-engine/docs/how-to/load-balance-ingress#gcloud
创建流程:创建两个 deployment 和对应的 service,最后基于这两个service创建ingress。 最终实现效果,当访问
当客户端将请求发送到网址路径为 "/" 的负载平衡器时,请求将被转发到端口 60000 上的 hello-world Service。
当客户端将请求发送到网址路径为 "/kube" 的负载平衡器时,请求将被转发到端口 80 上的 hello-kubernetes Service。
大致流程:
deployment -> service -> ingress
hello-kubernetes-deployment.yaml
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-service.yaml
apiVersion: v1
kind: Service
metadata:
name: hello-kubernetes
spec:
# 同时具有 greeting: hello 标签和 department: kubernetes 标签的任何 Pod 都是 Service 的成员。
type: NodePort
selector:
greeting: hello
department: kubernetes
ports:
# 当请求发送到 TCP 端口 80 上的 Service 时,它将被转发到 TCP 端口 8080 上的某个成员 Pod。
- protocol: TCP
port: 80
targetPort: 8080hello-world-deployment.yaml
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-service.yaml
apiVersion: v1
kind: Service
metadata:
name: hello-world
spec:
type: NodePort
selector:
greeting: hello
department: world
ports:
- protocol: TCP
port: 60000
# 当请求发送到 TCP 端口 60000 上的 Service 时,它将被转发到 TCP 端口 50000 上的某个成员 Pod
targetPort: 50000选中刚创建的两个service

配置路径

最后我们可以预览yaml
---
apiVersion: "extensions/v1beta1"
kind: "Ingress"
metadata:
name: "my-ingress"
namespace: "default"
spec:
rules:
- http:
paths:
- path: "/*"
backend:
serviceName: "hello-world"
servicePort: 60000
- path: "/kube"
backend:
serviceName: "hello-kubernetes"
servicePort: 80查看刚创建的ingress kubectl get ingress my-ingress --output yaml
status:
loadBalancer:
ingress:
- ip: 34.117.148.159google cloud会自动创建负载均衡器并暴露一个IP地址,比如 34.117.148.159,访问根路径和/kube会返回期望的结果拉
PS:真实情况是我怎么访问这个IP都显示超时,检查了防火墙也没有问题,无奈我联系Google cloud人工客服,虽然他们只能看懂英文,不过很好沟通。 最终确认是IP被墙了,在外国访问是正常的... 你可以打开浏览器的代理
参考
https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer
https://cloud.google.com/kubernetes-engine/docs/how-to/load-balance-ingress#gcloud