我已经通过helm安装了ingress控制器作为守护程序集。我已将入口配置如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: webapp-ingress
namespace: rcc
annotations:
haproxy.org/check: 'true'
haproxy.org/check-http: /serviceCheck
haproxy.org/check-interval: 5s
haproxy.org/cookie-persistence: SERVERID
haproxy.org/forwarded-for: 'true'
haproxy.org/load-balance: leastconn
kubernetes.io/ingress.class: haproxy
spec:
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: webapp-frontend
port:
number: 8080
kubectl get ingress -n rcc
Warning: extensions/v1beta1 Ingress is deprecated in v1.14+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
webapp-ingress <none> example.com 10.110.186.170 80 11h
选择的类型是负载平衡器。我可以从任何节点ping端口80上入口的ip地址,也可以很好地卷曲它。我还可以从节点浏览任何入口pod的ip地址,这很好。但当我浏览节点ip o端口80时,连接被拒绝。我在这里缺了什么吗?
我安装了上一个haproxy ingress
,它是使用helm的0.13.4
版本。
默认情况下,它安装有LoadBalancer
服务类型:
$ kubectl get svc -n ingress-haproxy
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
haproxy-ingress LoadBalancer 10.102.166.149 <pending> 80:30312/TCP,443:32524/TCP 3m45s
由于我有相同的kubeadm
集群,EXTERNAL-IP
将挂起。正如您在问题中正确提到的,当使用kubeadm
设置集群时,CLUSTER-IP
可以在节点上访问。
有两个选项可以访问入口:
- 使用
NodePort
:
从上面的输出中,有一个用于内部暴露端口80
的NodePort 30312
。因此,Node_IP:NodePort
:应该从集群外部访问它
curl NODE_IP:30312 -IH "Host: example.com"
HTTP/1.1 200 OK
- 设置
metallb
:
按照安装指南进行操作,第二步是配置metallb
。我使用第2层。请小心分配未使用的ip范围!
在我安装并设置了metallb
之后,我的haproxy现在有了EXTERNAL-IP
:
$ kubectl get svc -n ingress-haproxy
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
haproxy-ingress LoadBalancer 10.102.166.149 172.16.1.241 80:30312/TCP,443:32524/TCP 10m
现在我可以通过EXTERNAL-IP
在端口80
:上访问入口
curl 172.16.1.241 -IH "Host: example.com"
HTTP/1.1 200 OK
阅读有用:
- Kubernetes服务类型