入口无地址

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

我的机器里有一些 k8s 集群,我尝试做一些学习的东西,但我现在就开始堆叠。

我有 2 个应用程序,一个是 mysql,另一个是 wordpress,它们运行良好。当我为 WordPress 提供 LoadBalancer 类型时,它会获取一个 IP,我可以在浏览器中看到。

所以我想创建一个 Ingress 并按主机名调用,但 Ingress 不采用负载均衡器 IP。 我是不是做错了什么?

这是我的 Ingress 配置

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: wp-ingress
  kubernetes.io/ingress.class: nginx
  labels:
    name: wp-ingress
spec:
  rules:
  - host: wordpress.pandora.local
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: wp-svc
            port: 
              number: 80
  - host: phpmyadmin.pandora.local
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: phpmyadmin-svc
            port: 
              number: 80

和问题

# kg ingress
NAME         CLASS    HOSTS                                              ADDRESS   PORTS   AGE
wp-ingress   <none>   wordpress.pandora.local,phpmyadmin.pandora.local             80      38m

我正在使用 Metallb 作为负载均衡器,我知道这是因为 wordpress,但如果你想看看

kg svc -A
NAMESPACE          NAME                                 TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)                      AGE
calico-apiserver   calico-api                           ClusterIP      10.108.149.243   <none>           443/TCP                      45h
calico-system      calico-kube-controllers-metrics      ClusterIP      10.100.211.40    <none>           9094/TCP                     45h
calico-system      calico-typha                         ClusterIP      10.107.217.253   <none>           5473/TCP                     45h
default            kubernetes                           ClusterIP      10.96.0.1        <none>           443/TCP                      45h
default            mysql-svc                            ClusterIP      10.103.110.242   <none>           3306/TCP                     3h1m
default            phpmyadmin-svc                       ClusterIP      10.105.195.144   <none>           80/TCP                       156m
default            wp-svc                               ClusterIP      10.100.96.37     <none>           80/TCP                       126m
ingress-nginx      ingress-nginx-controller             LoadBalancer   10.99.196.206    192.168.188.20   80:30986/TCP,443:32709/TCP   49m
ingress-nginx      ingress-nginx-controller-admission   ClusterIP      10.99.212.249    <none>           443/TCP                      49m
kube-system        kube-dns                             ClusterIP      10.96.0.10       <none>           53/UDP,53/TCP,9153/TCP       45h

我该如何解决这个问题

kubernetes kubernetes-ingress
2个回答
3
投票

我解决了。感谢您的帮助:) 问题是要上课了。

kind: Ingress
metadata:
  name: wp-ingress
spec:
  rules:
  - host: wordpress.pandora.local
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: wp-svc
            port:
              number: 80
  - host: phpmyadmin.pandora.local
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: phpmyadmin-svc
            port:
              number: 80
  ingressClassName: nginx

我添加了最后一行 ingressClassName: nginx 定义,它起作用了!

kg ingress
NAME         CLASS   HOSTS                                              ADDRESS         PORTS   AGE
wp-ingress   nginx   wordpress.pandora.local,phpmyadmin.pandora.local   192.168.88.20   80      5h19m

0
投票

尽管这里已经有一个被接受的答案,但我想展示解决此问题的步骤。

完整源代码这里

步骤1

检查您的入口。

kubectl get ingress -n local

您会看到控制器尚未为主机名分配任何地址。

步骤2

检查控制器日志。我在这里使用 Kubernetes 仪表板。如果您愿意,可以使用

kubectl
。 错误会告诉你问题所在。

这是日志中看到的错误:

"Ignoring ingress because of error while validating ingress class" ingress="local/test-app-release-test-app-api" error="ingress does not contain a valid IngressClass"

步骤3

找到

IngressClass
。您可以通过运行以下命令来获取此信息:
kubectl get ingressclasses
或通过 K8s 仪表板找到它。

命令方式:

仪表板方式:

步骤4

更新您的入口

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test-app-release-test-app-api
  labels:
    helm.sh/chart: test-app-api-0.1.0
    app.kubernetes.io/name: test-app-api
    app.kubernetes.io/instance: test-app-release
    app.kubernetes.io/version: "1.16.0"
    app.kubernetes.io/managed-by: Helm
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  ingressClassName: nginx    # <------ THIS GUY
  rules:
    - host: "chart-example.local"
      http:
        paths:
          - path: /my-test-app(/|$)(.*)
            pathType: ImplementationSpecific
            backend:
              service:
                name: test-app-release-test-app-api
                port:
                  number: 80
© www.soinside.com 2019 - 2024. All rights reserved.