ken*_*tor 16 google-cloud-platform gcloud kubernetes google-kubernetes-engine
在我的gcloud控制台中,它显示了我定义的入口的以下错误:
同步时出错:评估入口规范时出错:服务"monitoring/kube-prometheus"是"ClusterIP"类型,预期"NodePort"或"LoadBalancer"
我使用traefik作为反向代理(而不是nginx),因此我使用ClusterIP定义入口.据我所知,该过程所有流量都通过traefik服务代理(其中定义了Loadbalancer入口),因此我的所有其他入口应该实际上有一个ClusterIP而不是NodePort或Loadbalancer?
题:
那么为什么Google Cloud警告我它期望NodePort或LoadBalancer?
pet*_*urg 15
谢谢@aayore。就我而言,我必须明确指定一个入口类,以便 Google Cloud 不会干扰。Nginx 入口似乎对ClusterIp
服务很满意。
metadata:
name: foo
annotations:
kubernetes.io/ingress.class: "nginx"
Run Code Online (Sandbox Code Playgroud)
use*_*282 12
cloud.google.com/neg: '{"ingress": true}'
对于我们来说,解决方案是在要公开的服务上设置注释。
通常,在以下条件下,这会自动设置为所有服务:
当我们开始引入网络策略时,我们公开的服务停止工作。
因此上面的示例也应该适用于 ClusterIP:
apiVersion: v1
kind: Service
metadata:
name: testapp
annotations:
cloud.google.com/neg: '{"ingress": true}'
spec:
ports: ...
type: ClusterIP
Run Code Online (Sandbox Code Playgroud)
我不知道为什么会发生此错误,因为(在我看来)这是一个有效的配置。但是要清除错误,您可以将服务切换到命名的NodePort。然后将您的入口切换为使用端口名而不是端口号。例如:
服务:
apiVersion: v1
kind: Service
metadata:
name: testapp
spec:
ports:
- name: testapp-http # ADD THIS
port: 80
protocol: TCP
targetPort: 80
selector:
app: testapp
type: NodePort
Run Code Online (Sandbox Code Playgroud)
入口:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: testapp
spec:
rules:
- host: hostname.goes.here
http:
paths:
- backend:
serviceName: testapp
# USE THE PORT NAME FROM THE SERVICE INSTEAD OF THE PORT NUMBER
servicePort: testapp-http
path: /
Run Code Online (Sandbox Code Playgroud)
更新:
这是我从Google收到的说明。
由于默认情况下服务是ClusterIP [1],因此可以从群集内部访问这种类型的服务。使用kube-proxy时,可以从外部访问它,而不意味着直接通过ingress访问。
作为建议,我个人认为本文[2]有助于理解这些类型的服务之间的区别。
[1] https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types
归档时间: |
|
查看次数: |
4537 次 |
最近记录: |