Kubernetes 部署不可公开访问

Kubernetes deployment not publicly accesible

我正在尝试访问我们在 Azure 上的 Kubernetes 集群上的部署。这是 Azure Kubernetes 服务 (AKS)。以下是部署的配置文件和应该公开部署的服务。

配置

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mira-api-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mira-api
  template:
    metadata:
      labels:
        app: mira-api
    spec:
      containers:
        - name: backend
          image: registry.gitlab.com/izit/mira-backend
          ports:
            - containerPort: 8080
              name: http
              protocol: TCP
      imagePullSecrets:
        - name: regcred
apiVersion: v1
kind: Service
metadata:
  name: mira-api-service
spec:
  type: LoadBalancer
  ports:
    - port: 80
      targetPort: 8080
      protocol: TCP
      name: http
  selector:
    run: mira-api

当我在应用这些配置后检查集群时,我正确地看到了 pod 运行。还创建了该服务并分配了 public IP。

在此部署之后,我没有看到任何请求得到处理。我在浏览器中收到一条错误消息,指出该站点无法访问。有什么想法我可能配置错了吗?

您的服务选择器标签和 pod 标签不匹配。

您在部署的 pod 模板中有 app: mira-api 标签,但在服务的标签选择器中有 run: mira-api

更改您的服务选择器标签以匹配 pod 标签,如下所示。

apiVersion: v1
kind: Service
metadata:
  name: mira-api-service
spec:
  type: LoadBalancer
  ports:
    - port: 80
      targetPort: 8080
      protocol: TCP
      name: http
  selector:
    app: mira-api

要确保您的服务正在选择后端 pods,您可以 运行 kubectl describe svc <svc name> 命令并检查它是否列出了任何 Endpoints

# kubectl describe svc postgres
Name:              postgres
Namespace:         default
Labels:            app=postgres
Annotations:       kubectl.kubernetes.io/last-applied-configuration:
                     {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app":"postgres"},"name":"postgres","namespace":"default"},"s...
Selector:          app=postgres
Type:              ClusterIP
IP:                10.106.7.183
Port:              default  5432/TCP
TargetPort:        5432/TCP
Endpoints:         10.244.2.117:5432    <------- This line
Session Affinity:  None
Events:            <none>