我的问题是为什么入口不为服务分配地址?
首先我创建了 3 个部署:
kubectl create deployment cheddar --image=errm/cheese:cheddar
kubectl create deployment stilton --image=errm/cheese:stilton
kubectl create deployment wensleydale --image=errm/cheese:wensleydale
其次,我公开了这 3 个部署:
kubectl expose deployment cheddar --port=80
kubectl expose deployment stilton --port=80
kubectl expose deployment wensleydale --port=80
然后我用
kubectl apply -f ingress.yaml
应用我的ingress.yaml,ingress.yaml内容是:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cheddar
spec:
ingressClassName: nginx
rules:
- host: cheddar.127.0.0.1.nip.io
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: cheddar
port:
number: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: stilton
spec:
ingressClassName: nginx
rules:
- host: stilton.127.0.0.1.nip.io
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: stilton
port:
number: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: wensleydale
spec:
ingressClassName: nginx
rules:
- host: wensleydale.127.0.0.1.nip.io
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: wensleydale
port:
number: 80
---
但是当我路由这条路径时,结果仍然是
404-nginx
kubectl get ingress
返回:
NAME CLASS HOSTS ADDRESS PORTS AGE
cheddar nginx cheddar.127.0.0.1.nip.io 80 43s
stilton nginx stilton.127.0.0.1.nip.io 80 43s
wensleydale nginx wensleydale.127.0.0.1.nip.io 80 43s
NOTE1:我在 ubuntu 上使用 microk8s,我的集群版本是:
v1.21.7-3+7700880a5c71e2
➜ ~ k get no
NAME STATUS ROLES AGE VERSION
ali Ready <none> 8d v1.21.7-3+7700880a5c71e2
➜ ~ kubectl version
Client Version: version.Info{Major:"1", Minor:"21+", GitVersion:"v1.21.7-3+7700880a5c71e2", GitCommit:"7700880a5c71e25c44491ef5c7d7fb30527d8337", GitTreeState:"clean", BuildDate:"2021-11-17T22:07:23Z", GoVersion:"go1.16.10", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"21+", GitVersion:"v1.21.7-3+7700880a5c71e2", GitCommit:"7700880a5c71e25c44491ef5c7d7fb30527d8337", GitTreeState:"clean", BuildDate:"2021-11-17T22:02:47Z", GoVersion:"go1.16.10", Compiler:"gc", Platform:"linux/amd64"}
注意2:我已经通过此命令启用了入口扩展:
microk8s enable ingress
如果您使用的是裸机集群,则必须使用诸如 Metallb 之类的东西。 Kubernetes 没有实现网络负载均衡器,因此无法为您的入口分配 IP 地址。
既然你使用的是microk8s,你可以使用
microk8s enable metallb
如果您使用的是 aws、gcp、aks,您可以在他们的文档中找到它。
对于裸机,请参阅以下内容: https://metalb.org/