【发布时间】:2019-11-13 16:01:23
【问题描述】:
我在 Google Cloud Platform 中创建了一个 kubernetes 集群,之后,我在集群上安装了 Helm/tiller,之后,我按照官方文档所说的那样安装了带有 helm 的 traefik。
现在我正在尝试为服务创建 Ingress,但如果我添加注释 kubernetes.io/ingress.class: traefik,则不会创建 Ingress 的负载均衡器。
但如果没有注释,它可以与默认 Ingress 一起使用。
(服务类型为nodeport)
编辑:我还在一个干净的谷歌云 kubernetes 集群中尝试了这个示例:https://supergiant.io/blog/using-traefik-as-ingress-controller-for-your-kubernetes-cluster/ 但它相同,当我选择 kubernetes.io/ingress.class: traefik 时,不会为入口创建负载均衡器。
我的文件是:
animals-svc.yaml:
---
apiVersion: v1
kind: Service
metadata:
name: bear
spec:
type: NodePort
ports:
- name: http
targetPort: 80
port: 80
selector:
app: animals
task: bear
---
apiVersion: v1
kind: Service
metadata:
name: moose
spec:
type: NodePort
ports:
- name: http
targetPort: 80
port: 80
selector:
app: animals
task: moose
---
apiVersion: v1
kind: Service
metadata:
name: hare
annotations:
traefik.backend.circuitbreaker: "NetworkErrorRatio() > 0.5"
spec:
type: NodePort
ports:
- name: http
targetPort: 80
port: 80
selector:
app: animals
task: hare
animals-ingress.yaml:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: animals
annotations:
kubernetes.io/ingress.class: traefik
# kubernetes.io/ingress.global-static-ip-name: "my-reserved-global-ip"
# traefik.ingress.kubernetes.io/frontend-entry-points: http
# traefik.ingress.kubernetes.io/redirect-entry-point: http
# traefik.ingress.kubernetes.io/redirect-permanent: "true"
spec:
rules:
- host: hare.minikube
http:
paths:
- path: /
backend:
serviceName: hare
servicePort: http
- host: bear.minikube
http:
paths:
- path: /
backend:
serviceName: bear
servicePort: http
- host: moose.minikube
http:
paths:
- path: /
backend:
serviceName: moose
servicePort: http
animals-deployment.yaml:
---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: bear
labels:
app: animals
animal: bear
spec:
replicas: 2
selector:
matchLabels:
app: animals
task: bear
template:
metadata:
labels:
app: animals
task: bear
version: v0.0.1
spec:
containers:
- name: bear
image: supergiantkir/animals:bear
ports:
- containerPort: 80
---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: moose
labels:
app: animals
animal: moose
spec:
replicas: 2
selector:
matchLabels:
app: animals
task: moose
template:
metadata:
labels:
app: animals
task: moose
version: v0.0.1
spec:
containers:
- name: moose
image: supergiantkir/animals:moose
ports:
- containerPort: 80
---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: hare
labels:
app: animals
animal: hare
spec:
replicas: 2
selector:
matchLabels:
app: animals
task: hare
template:
metadata:
labels:
app: animals
task: hare
version: v0.0.1
spec:
containers:
- name: hare
image: supergiantkir/animals:hare
ports:
- containerPort: 80
服务已创建,但入口负载均衡器未创建:
但是,如果我删除 kubernetes.io/ingress.class: traefik 行,它将与 Kubernetes 的默认入口一起使用
【问题讨论】:
-
为什么你认为 kubernetes.io/ingress.class: traefik 应该为你创建负载均衡器?这是 kubernetes.io/ingress.class: gce 为你创建了 loadballancer,但不是 traefik
-
哇!真的吗?我读到“当您创建一个 Ingress 对象时,GKE 入口控制器会创建一个 Google Cloud Platform HTTP(S) 负载平衡器,并根据 Ingress 及其相关服务中的信息对其进行配置。”这里:cloud.google.com/kubernetes-engine/docs/concepts/ingress 然后我虽然使用 traefik 我还需要编写 Ingress,并且会自动创建负载均衡器......然后,使用 traefik,我应该将服务从 NodePort 更改为 LoadBalancer 吗?还是应该在创建负载均衡器之后使用 NodePort 创建服务?
标签: kubernetes kubernetes-ingress