我的机器里有一些 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
我该如何解决这个问题
我解决了。感谢您的帮助:) 问题是要上课了。
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
尽管这里已经有一个被接受的答案,但我想展示解决此问题的步骤。
检查您的入口。
kubectl get ingress -n local
您会看到控制器尚未为主机名分配任何地址。
检查控制器日志。我在这里使用 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"
找到
IngressClass
。您可以通过运行以下命令来获取此信息:kubectl get ingressclasses
或通过 K8s 仪表板找到它。
命令方式:
仪表板方式:
更新您的入口
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