You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AKS服务无端点且标签选择器不匹配,无法访问外部IP

AKS中Service无端点导致无法访问WordPress页面的问题排查与解决

问题背景

作为AKS新手,我创建了php-svc Service和wordpressb Deployment的YAML配置,但访问Service外部IP无响应,且发现Pod标签与Service选择器不匹配。

配置文件

Deployment与Service的YAML配置

apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpressbspec:
  replicas: 1
  selector:
    matchlabels:
      app: wordpressb
  template:
    metadata:
      labels:
        app: wordpressb
    spec:
      containers:
      - name: wordpressb
        image: acrakswordpress.azurecr.io/wordpress:v1
        ports:
          - containerPort: 80
        env:
        - name: DATABASE_HOST
          value: "<<serverName>>.mysql.database.azure.com"
        - name: DATABASE_USERNAME
          value: "<<dbName>>"
        - name: DATABASE_PASSWORD
          value: "<<dbPassword>>"
        - name: DATABASE_NAME
          value: "<<dbName>>"
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
                - key: "app"
                  operator: In
                  value: wordpressb
            topologyKey: "kubernetes.io/hostname"

apiVersion: v1
kind: Service
metadata:
  name: php-svcspec:
  type: LoadBalancer
  ports:
    - port: 80
  selector:
    app: wordpressb

问题现象

  1. Service无端点
    执行kubectl describe service php-svc结果显示Endpoints为<none>:
Name:                     php-svc
Namespace:                default
Labels:                   <none>
Annotations:              <none>
Selector:                 app=wordpressb
Type:                     LoadBalancer
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       10.0.74.48
IPs:                      10.0.74.48
LoadBalancer Ingress:     52.140.2.45
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  30580/TCP
Endpoints:                <none>
Session Affinity:         None
External Traffic Policy:  Cluster
Events:
  Type    Reason                Age   From                Message
  ----    ------                ----  ----                -------
  Normal  EnsuringLoadBalancer  44s   service-controller  Ensuring load balancer
  Normal  EnsuredLoadBalancer   34s   service-controller  Ensured load balancer
  1. Pod标签与Service选择器不匹配
    当前运行的wordpress-blog Pod标签为run=wordpress-blog,与Service选择器app=wordpressb不符,执行kubectl describe pod wordpress-blog结果:
Name:             wordpress-blog
Namespace:        default
Priority:         0
Service Account:  default
Node:             aks-nodepool1-41875026-vmss000000/10.224.0.5
Start Time:       Sun, 19 May 2024 21:48:19 +0530
Labels:           run=wordpress-blog
Annotations:      <none>
Status:           Running
IP:               10.244.1.17
IPs:
  IP:  10.244.1.17
Containers:
  wordpress-blog:
    Container ID:   containerd://758ad6ebc7cb0603e0bfed305070a3c990b6cc318069c73fb1649ec1555183a7
    Image:          wordpress
    Image ID:       docker.io/library/wordpress@sha256:f468bab53528df6f87dfe11a80de26eff57e0f515e243d9dec73a02c80c273a7
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Sun, 19 May 2024 21:48:22 +0530
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-jfb56 (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  kube-api-access-jfb56:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:                      <none>

解决方案

1. 修复YAML配置中的语法错误

原始YAML存在多处语法错误:

  • Deployment的metadata.name与spec未换行拆分,需改为name: wordpressb后单独换行写spec:
  • Service的metadata.name与spec未换行拆分,需改为name: php-svc后单独换行写spec:
  • Deployment的selector.matchlabels应为matchLabels(Kubernetes字段名大小写敏感)
  • Pod反亲和性规则中value应为values(数组格式)

修正后的YAML配置:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpressb
spec:
  replicas: 1
  selector:
    matchLabels:
      app: wordpressb
  template:
    metadata:
      labels:
        app: wordpressb
    spec:
      containers:
      - name: wordpressb
        image: acrakswordpress.azurecr.io/wordpress:v1
        ports:
          - containerPort: 80
        env:
        - name: DATABASE_HOST
          value: "<<serverName>>.mysql.database.azure.com"
        - name: DATABASE_USERNAME
          value: "<<dbName>>"
        - name: DATABASE_PASSWORD
          value: "<<dbPassword>>"
        - name: DATABASE_NAME
          value: "<<dbName>>"
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
                - key: "app"
                  operator: In
                  values: ["wordpressb"]
            topologyKey: "kubernetes.io/hostname"

---
apiVersion: v1
kind: Service
metadata:
  name: php-svc
spec:
  type: LoadBalancer
  ports:
    - port: 80
      targetPort: 80
  selector:
    app: wordpressb

2. 清理错误Pod并重新部署

  • 删除当前运行的wordpress-blog Pod:
kubectl delete pod wordpress-blog
  • 应用修正后的YAML配置:
kubectl apply -f your-config-file.yaml

3. 验证配置生效

  • 检查Deployment是否成功创建匹配标签的Pod:
kubectl get pods -l app=wordpressb
  • 检查Service是否关联到端点:
kubectl describe service php-svc

当Endpoints字段显示Pod的IP地址时,即可访问Service的外部IP查看WordPress页面。


内容的提问来源于stack exchange,提问作者devTeam Monconnect

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 18:42:37