YAML 文件我的意思是部署和服务配置。您可以随时使用这些信息编辑您的问题。
在 GKE 上,您可以运行 2 种类型的入口。
Nginx 入口控制器
GCP 入口控制器
如果你想使用 GCP Ingress,你的 Services 必须是NodePort
type。
在服务清单中,请注意类型是 NodePort。这是用于配置 HTTP(S) 负载平衡器的 Ingress 所需的类型。更详细的信息可以在这里找到。
如果你想使用 Nginx 控制器,你需要部署它(最佳实践是使用HELM
)。您需要在您Ingress
喜欢的特殊注释中使用它来强制执行它:
annotations: kubernetes.io/ingress.class: nginx
我已经提到了差异以及在这个 SO 答案中应该如何设置。
假设,在你提到的关于 GKE 入口的标题中,我会给你一个工作示例。为此,我将使用 2 个部署、2 个 svc(hellov1 和 hellov2)和 Ingress。
此外,我不确定这是否是复制/粘贴错误,但在您的 YAML 入口定义中缺少一些空格。它应该看起来像:
spec:
rules:
- http:
paths:
YAML:
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-v2
spec:
selector:
matchLabels:
app: hello-v2
replicas: 1
template:
metadata:
labels:
app: hello-v2
spec:
containers:
- name: hellov2
image: "gcr.io/google-samples/hello-app:2.0"
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: hello-v2-svc
labels:
app: hello-v2
spec:
type: NodePort
selector:
app: hello-v2
ports:
- port: 8080
targetPort: 8080
protocol: TCP
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello
labels:
app: hello
spec:
replicas: 1
selector:
matchLabels:
app: hello
template:
metadata:
labels:
app: hello
spec:
containers:
- name: nginx
image: gcr.io/google-samples/hello-app:1.0
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: hello-svc
labels:
app: hello
spec:
type: NodePort
selector:
app: hello
ports:
- port: 8080
targetPort: 8080
protocol: TCP
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: myingress
spec:
rules:
- http:
paths:
- path: /hello
backend:
serviceName: hello-svc
servicePort: 8080
- path: /hello-v2
backend:
serviceName: hello-v2-svc
servicePort: 8080
$ kubectl get po,svc,ing
NAME READY STATUS RESTARTS AGE
pod/hello-59c5c6ff8d-vdk8d 1/1 Running 0 8m16s
pod/hello-v2-6875bf9bc4-gtzpz 1/1 Running 0 8m16s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/hello-svc NodePort 10.8.9.67 <none> 8080:30232/TCP 8m15s
service/hello-v2-svc NodePort 10.8.3.15 <none> 8080:30501/TCP 8m16s
service/kubernetes ClusterIP 10.8.0.1 <none> 443/TCP 7h
NAME HOSTS ADDRESS PORTS AGE
ingress.extensions/myingress * 34.120.142.85 80 8m15s
部署 Ingress 后,GKE 需要大约 5 分钟才能开始正常工作。
user@cloudshell:~ (k8s-tests-XXX)$ curl 34.120.142.85/hello
Hello, world!
Version: 1.0.0
Hostname: hello-59c5c6ff8d-vdk8d
user@cloudshell:~ (k8s-tests-XXX)$ curl 34.120.142.85/hello-v2
Hello, world!
Version: 2.0.0
Hostname: hello-v2-6875bf9bc4-gtzpz
我鼓励您阅读 GKE 文档为外部负载平衡配置 Ingress。您可以在此处找到更多示例和说明如何使用多个后端。这篇文章也很有用。
此配置仅适用于 path/hello
和/nginx
,但是您始终可以检查默认后端选项。
如果您仍然有 404,请验证您是否设置了正确的port
,targetPort
和servicePort
.