我已经将我的microk8s设置转移到了一个新的服务器上,发现曾经工作过的入口设置我的试用设置停止了工作。
我正在运行这个最小的whoami应用程序:
apiVersion: apps/v1
kind: Deployment
metadata:
name: whoami
namespace: default
labels:
app: whoami
spec:
selector:
matchLabels:
app: whoami
template:
metadata:
labels:
app: whoami
spec:
containers:
- name: whoami
image: containous/whoami
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: whoami
namespace: default
spec:
selector:
app: whoami
ports:
- protocol: TCP
port: 80
targetPort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: whoami
namespace: default
annotations:
kubernetes.io/ingress.class: public
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: whoami
port:
number: 80
Pod已经启动并运行,服务正确地暴露了它,但入口不起作用:
kubectl get services whoami
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
whoami ClusterIP 10.152.183.184 <none> 80/TCP 26m
curl 10.152.183.184
Hostname: whoami-567b85d54d-qbbd5
IP: 127.0.0.1
IP: ::1
IP: 10.1.76.7
IP: fe80::e850:aaff:fe72:91c4
RemoteAddr: 192.168.0.102:21910
GET / HTTP/1.1
Host: 10.152.183.184
User-Agent: curl/7.68.0
Accept: */*
kubectl get ingress whoami
NAME CLASS HOSTS ADDRESS PORTS AGE
whoami <none> * 127.0.0.1 80 28m
nginx入口控制器日志显示以下条目:
controller.go:1076] Service "default/whoami" does not have any active Endpoint.
但同样,通过clusterIP进行访问是可行的,因此Pod和Service都在做他们的工作。
我真的不知道这是怎么发生的,但端点与pod IP不匹配。我用kubectl delete endpoints whoami
手动删除了端点,用现在正确的IP重新创建了它,现在ingress似乎可以工作了。
我很高兴听到你成功了。
我试图找出这种行为的原因,但不幸的是,我还没有找到。在这个链接中,有一些类似警告的解决方案。也许这会对某人有所帮助。
第一种情况是入口控制器的入口类和用于服务的入口资源清单中的入口类不匹配。
Nginx安装命令,简称:
helm install stable/nginx-ingress --name ${INGRESS_RELEASE_NAME} --namespace ${K8S_NAMESPACE} --set controller.scope.enabled=true --set controller.scope.namespace=${K8S_NAMESPACE} --set controller.ingressClass=${NGINX_INGRESS_CLASS}
入口资源规范,摘录:
apiVersion: extensions/v1beta1 kind: Ingress metadata: labels: annotations: # folowing line is not valid for K8s or Helm, # but reflects the values must be the same kubernetes.io/ingress.class: ${NGINX_INGRESS_CLASS}
在第二个解决方案中,包括服务选择器中的id指令:
selector:
app: whoami
id: "0"
另请参阅StackOverflow上的这些问题:
- K8入口没有终点
- Kubernetes服务没有活动端点
- Kubernetes-ingress nginx";无活动端点";错误