我已使用
minikube addons enable ingress
添加了入口,并验证了它正在运行:
$ kubectl get pods -n ingress-nginx
NAME READY STATUS RESTARTS AGE
ingress-nginx-admission-create-pzhzn 0/1 Completed 0 53m
ingress-nginx-admission-patch-k9xdn 0/1 Completed 0 53m
ingress-nginx-controller-7c6974c4d8-rkcrp 1/1 Running 0 53m
然后我得到 minikube ip:
$ minikube ip
192.168.49.2
这是我的部署/服务/入口定义:
apiVersion: apps/v1
kind: Deployment
metadata:
name: karpenter-test-deployment
labels:
app: karpenter-test
spec:
replicas: 1
selector:
matchLabels:
app: karpenter-test
template:
metadata:
labels:
app: karpenter-test
spec:
containers:
- name: karpenter-test-manager
image: localhost/test-karpenter-manager:latest
imagePullPolicy: Never
ports:
- containerPort: 8000
---
apiVersion: v1
kind: Service
metadata:
name: karpenter-test-service
spec:
selector:
app: karpenter-test
ports:
- protocol: TCP
port: 8000
targetPort: 8000
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: minimal-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: karpenter-test-service
port:
number: 8000
我可以验证它是否正在运行,因为它显示在 Pod 中:
$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
karpenter-test-deployment-945ff8f95-fbv24 1/1 Running 0 95m 10.244.0.3 minikube <none> <none>
但是当我尝试在浏览器中转到
http://192.168.49.2/api
时,它只是无限期地挂起。为了完全确定,我直接公开了该服务:
$ kubectl port-forward service/karpenter-test-service 8000:8000
Forwarding from 127.0.0.1:8000 -> 8000
Forwarding from [::1]:8000 -> 8000
Handling connection for 8000
然后我就可以访问
http://localhost:8000/api
的服务了。
为什么当我尝试直接访问入口时它总是挂起?
您描述的行为可能是因为使用 Docker 驱动程序时,
ingress
和 ingress-dns
附加组件目前仅支持 由于 Linux 系统(而非 MacOS)上的一些复杂性,如已知问题中所述minikube 文档的部分。
您还可以尝试使用此解决方法在 MacOS 上公开服务。