如何获取Kubernetes Ingress端点/IP地址?CentOS集群(1主2从)K8S 1.9.5
获取Kubernetes Ingress端点/IP地址的步骤
嘿,作为Ingress新手,咱们先理清楚:你目前已经有了Deployment和Service,但还缺少Ingress规则配置和确认Ingress Controller的状态,这两步是获取Ingress访问端点的关键,下面一步步来:
第一步:创建Ingress规则配置文件
首先得定义Ingress资源,把两个服务的路径映射规则写进去。创建一个名为my-ingress.yaml的文件,内容如下:
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: my-services-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - http: paths: - path: /nginx backend: serviceName: nginx servicePort: 80 - path: /echo backend: serviceName: echoserver servicePort: 8080
注:因为你用的是K8S 1.9.5,所以apiVersion用
extensions/v1beta1(1.19+版本才改用networking.k8s.io/v1);rewrite-target注解是为了让请求路径重写到服务的根路径,避免nginx/echoserver找不到对应资源。
第二步:应用Ingress配置
执行命令部署这个Ingress资源:
kubectl apply -f my-ingress.yaml
第三步:获取Ingress的IP/端点
方法1:直接查看Ingress资源状态
执行命令:
kubectl get ingress
输出大概是这样:
NAME HOSTS ADDRESS PORTS AGE my-services-ingress * 192.168.1.100 80 5m
这里的ADDRESS字段就是Ingress的访问IP,之后你就可以通过http://<ADDRESS>/nginx访问nginx服务,http://<ADDRESS>/echo访问echoserver服务。
方法2:如果ADDRESS为空(常见于NodePort模式的Ingress Controller)
KubeSpray部署的K8S集群,默认的Ingress Controller(一般是nginx-ingress)可能用的是NodePort模式,这时候需要先找到Ingress Controller的服务端口:
- 查看kube-system命名空间下的Ingress Controller服务:
kubectl get svc -n kube-system | grep ingress
输出类似:
nginx-ingress-controller NodePort 10.96.0.10 <none> 80:30080/TCP,443:30443/TCP 1d
- 这时候Ingress的访问端点就是任意集群节点的IP + 80对应的NodePort(这里是30080),比如你的主节点IP是
192.168.1.5,那访问地址就是http://192.168.1.5:30080/nginx和http://192.168.1.5:30080/echo。
额外提示
- 如果
kubectl get ingress长时间没有ADDRESS,大概率是Ingress Controller没正常部署,你可以用kubectl get pods -n kube-system | grep ingress检查Pod状态,确保所有Ingress Controller Pod都是Running状态。 - 因为你用的是K8S 1.9.5版本,部分新特性不支持,所以尽量用对应版本的Ingress配置语法,避免踩坑。
内容的提问来源于stack exchange,提问作者user4889345




