microk8s 中的入口未分配地址

问题描述 投票:0回答:1

我的问题是为什么入口不为服务分配地址?

首先我创建了 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

kubernetes kubernetes-ingress nginx-ingress microk8s
1个回答
2
投票

如果您使用的是裸机集群,则必须使用诸如 Metallb 之类的东西。 Kubernetes 没有实现网络负载均衡器,因此无法为您的入口分配 IP 地址。

既然你使用的是microk8s,你可以使用

microk8s enable metallb

如果您使用的是 aws、gcp、aks,您可以在他们的文档中找到它。

对于裸机,请参阅以下内容: https://metalb.org/

© www.soinside.com 2019 - 2024. All rights reserved.