问题:我在 GKE 区域集群上运行 Wiki.js,并遇到了 Ingress 配置问题。Ingress 控制器返回“所有后端服务处于不健康状态”,区域网络端点组显示 0/1 个可操作端点。这是在编辑 wikijs 面板管理员上的设置后发生的。
环境:
- GKE 区域集群
- Wiki.js版本:2.5
当前状态:
- 所有 Pod 均正在运行
- 仍然能够通过服务 IP 连接到 wikijs
- 区域网络端点组:0/1 可运行
当前配置:
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-wikijs
namespace: test
labels:
app: test-wikijs
spec:
replicas: 1
selector:
matchLabels:
app: test-wikijs
template:
metadata:
labels:
app: test-wikijs
spec:
initContainers:
- name: init-permissions
image: busybox
command: ["sh", "-c", "chmod -R 777 /wiki/data && chown -R 1000:1000 /wiki/data"]
volumeMounts:
- name: wikijs-data
mountPath: /wiki/data
containers:
- name: test-wikijs
image: requarks/wiki:2.5
ports:
- containerPort: 3000
env:
- name: DB_TYPE
valueFrom:
configMapKeyRef:
name: test-wikjs-config
key: DB_TYPE
- name: DB_HOST
valueFrom:
configMapKeyRef:
name: test-wikjs-config
key: DB_HOST
- name: DB_PORT
valueFrom:
configMapKeyRef:
name: test-wikjs-config
key: DB_PORT
- name: DB_NAME
valueFrom:
secretKeyRef:
name: sql-secret
key: POSTGRES_DB
- name: DB_USER
valueFrom:
secretKeyRef:
name: sql-secret
key: POSTGRES_USER
- name: DB_PASS
valueFrom:
secretKeyRef:
name: sql-secret
key: POSTGRES_PASSWORD
volumeMounts:
- name: wikijs-data
mountPath: /wiki/data
volumes:
- name: wikijs-data
persistentVolumeClaim:
claimName: wikijs-data-pvc
---
# Service WikiJS
apiVersion: v1
kind: Service
metadata:
name: test-wikijs # Nom du service
namespace: test
labels:
app: test-wikijs
spec:
selector:
app: test-wikijs # Sélectionne les pods avec le label app=wikijs
ports:
- port: 80 # Port exposé par le service
targetPort: 3000 # Port de l'application WikiJS
type: LoadBalancer # Type de service qui expose l'application à l'extérieur
日志
PS C:\Users\nicol\Git\test> # Liste des ingress
>> kubectl get ingress -n test
>>
>> # Description détaillée de l'ingress
>> kubectl describe ingress wikijs-ingress-multi -n test
NAME CLASS HOSTS ADDRESS PORTS AGE
wikijs-ingress-multi <none> * **.**.***.*** 80 51m
Name: wikijs-ingress-multi
Labels: <none>
Namespace: test
Address: **.**.***.***
Ingress Class: <none>
Default backend: test-wikijs:80 (10.112.1.14:3000)
Rules:
Host Path Backends
---- ---- --------
* * test-wikijs:80 (10.112.1.14:3000)
Annotations: ingress.gcp.kubernetes.io/pre-shared-cert:
mcrt-5eff98e5-8917-4807-9148-79c10698f34a,mcrt-76d117a0-71b0-422f-8947-1e39df945093,mcrt-ac4dc442-6a28-4d0f-b8bf-767f1ee1511a
ingress.kubernetes.io/backends: {"k8s1-16d8895a-test-test-wikijs-80-1cd44efb":"UNHEALTHY"}
ingress.kubernetes.io/forwarding-rule: k8s2-fr-3t143vku-test-wikijs-ingress-multi-xlcxo7jh
ingress.kubernetes.io/https-forwarding-rule: k8s2-fs-3t143vku-test-wikijs-ingress-multi-xlcxo7jh
ingress.kubernetes.io/https-target-proxy: k8s2-ts-3t143vku-test-wikijs-ingress-multi-xlcxo7jh
ingress.kubernetes.io/ssl-cert:
mcrt-5eff98e5-8917-4807-9148-79c10698f34a,mcrt-76d117a0-71b0-422f-8947-1e39df945093,mcrt-ac4dc442-6a28-4d0f-b8bf-767f1ee1511a
ingress.kubernetes.io/static-ip: k8s2-fr-3t143vku-test-wikijs-ingress-multi-xlcxo7jh
ingress.kubernetes.io/target-proxy: k8s2-tp-3t143vku-test-wikijs-ingress-multi-xlcxo7jh
ingress.kubernetes.io/url-map: k8s2-um-3t143vku-test-wikijs-ingress-multi-xlcxo7jh
networking.gke.io/managed-certificates: shortwikitestbe,shortwikitesteu,shortwikitestcom
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Sync 50m loadbalancer-controller UrlMap "k8s2-um-3t143vku-test-wikijs-ingress-multi-xlcxo7jh" created
Normal Sync 50m loadbalancer-controller TargetProxy "k8s2-tp-3t143vku-test-wikijs-ingress-multi-xlcxo7jh" created
Normal Sync 49m loadbalancer-controller ForwardingRule "k8s2-fr-3t143vku-test-wikijs-ingress-multi-xlcxo7jh" created
Normal IPChanged 49m loadbalancer-controller IP is now **.**.***.***
Normal Sync 49m loadbalancer-controller TargetProxy "k8s2-ts-3t143vku-test-wikijs-ingress-multi-xlcxo7jh" created
Normal Sync 49m loadbalancer-controller ForwardingRule "k8s2-fs-3t143vku-test-wikijs-ingress-multi-xlcxo7jh" created
Normal Sync 6m7s (x11 over 51m) loadbalancer-controller Scheduled for sync
# État du service
>> kubectl get service test-wikijs -n test
>>
>> # Endpoints
>> kubectl get endpoints test-wikijs -n test
>>
>> # Description détaillée du service
>> kubectl describe service test-wikijs -n test
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
test-wikijs LoadBalancer 34.118.239.183 **.**.**.*** 80:32537/TCP 28h
NAME ENDPOINTS AGE
test-wikijs 10.112.1.14:3000 28h
Name: test-wikijs
Namespace: test
Labels: app=test-wikijs
Annotations: cloud.google.com/neg: {"ingress":true}
cloud.google.com/neg-status:
{"network_endpoint_groups":{"80":"k8s1-16d8895a-test-test-wikijs-80-1cd44efb"},"zones":["europe-west1-b"]}
Selector: app=test-wikijs
Type: LoadBalancer
IP Family Policy: SingleStack
IP Families: IPv4
IP: 34.118.239.183
IPs: 34.118.239.183
LoadBalancer Ingress: **.**.**.***
Port: <unset> 80/TCP
TargetPort: 3000/TCP
NodePort: <unset> 32537/TCP
Endpoints: 10.112.1.14:3000
Session Affinity: None
External Traffic Policy: Cluster
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal EnsuringLoadBalancer 57m (x3 over 112m) service-controller Ensuring load balancer
Normal EnsuredLoadBalancer 57m (x3 over 112m) service-controller Ensured load balancer
Normal Create 57m neg-controller Created NEG "k8s1-16d8895a-test-test-wikijs-80-1cd44efb" for test/test-wikijs-k8s1-16d8895a-test-test-wikijs-80-1cd44efb-/80-3000-GCE_VM_IP_PORT-L7 in "europe-west1-b".
Normal Attach 57m (x2 over 83m) neg-controller Attach 1 network endpoint(s) (NEG "k8s1-16d8895a-test-test-wikijs-80-1cd44efb" in zone "europe-west1-b")
问题:
- 什么原因导致 Ingress 处于“不健康状态”?
- 为什么显示 0/1 的网络端点可以运行?
- 我应该检查哪些特定的 GKE 配置?