Zipkin在K8s上使用Elasticsearch时无法访问

问题描述

我正在尝试在k8s中部署zipkin。我正在使用elasticsearch(版本6.8.8)作为存储。部署工作正常,服务器启动。但是,我只能通过端口转发来访问服务器。

python-opencv

之后,我可以访问$ kubectl -n ns-zipkin port-forward zipkin-bdcf7f78b-shd9p 8888:9411

可能是什么原因?服务的部署已经没有我期望的端点(请参见下面的输出)。

deployment.yaml

http://localhost:8888/zipkin/

apiVersion: apps/v1 kind: Deployment Metadata: name: zipkin labels: app: zipkin spec: replicas: 1 selector: matchLabels: app: zipkin template: Metadata: name: zipkin labels: app: zipkin spec: containers: - name: zipkin image: openzipkin/zipkin:2.21 imagePullPolicy: Always ports: - containerPort: 9411 protocol: TCP env: - name: STORAGE_TYPE value: elasticsearch - name: ES_HOSTS value: https://my-es-host:9243 - name: ES_USERNAME value: myUser - name: ES_PASSWORD value: myPassword - name: ES_HTTP_LOGGING value: HEADERS readinessProbe: httpGet: path: /api/v2/services port: 9411 initialDelaySeconds: 5 timeoutSeconds: 3

$ kubectl -n ns-zipkin describe deployment zipkin

service.yaml

Name:                   zipkin
Namespace:              ns-zipkin
CreationTimestamp:      Fri,04 Sep 2020 09:16:38 +0200
Labels:                 app=zipkin
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               app=zipkin
Replicas:               1 desired | 1 updated | 1 total | 1 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable,25% max surge
Pod Template:
  Labels:  app=zipkin
  Containers:
   zipkin:
    Image:      openzipkin/zipkin:2.21
    Port:       9411/TCP
    Host Port:  0/TCP
    Readiness:  http-get http://:9411/api/v2/services delay=5s timeout=3s period=10s #success=1 #failure=3
    Environment:
      STORAGE_TYPE:     elasticsearch
      ES_HOSTS:         https://my-es-host:9243
      ES_USERNAME:      myUser
      ES_PASSWORD:      myPassword
      ES_HTTP_LOGGING:  HEADERS
    Mounts:             <none>
  Volumes:              <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewreplicasetAvailable
Oldreplicasets:  <none>
Newreplicaset:   zipkin-6788f4d555 (1/1 replicas created)
Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  normal  Scalingreplicaset  43m   deployment-controller  Scaled up replica set zipkin-6788f4d555 to 1

apiVersion: v1 kind: Service Metadata: name: zipkin labels: app.kubernetes.io/name: zipkin app.kubernetes.io/instance: zipkin app: zipkin spec: type: ClusterIP ports: - port: 9411 targetPort: 9411 protocol: TCP name: http selector: app.kubernetes.io/name: zipkin app.kubernetes.io/instance: zipkin app: zipkin

$ kubectl -n ns-zipkin describe service zipkin

ingress.yaml

Name:              zipkin
Namespace:         ns-zipkin
Labels:            app=zipkin
                   app.kubernetes.io/instance=zipkin
                   app.kubernetes.io/name=zipkin
Annotations:       Selector:  app.kubernetes.io/instance=zipkin,app.kubernetes.io/name=zipkin,app=zipkin
Type:              ClusterIP
IP:                CONCRETE-IP-ADDRESS
Port:              http  9411/TCP
TargetPort:        9411/TCP
Endpoints:         <none>
Session Affinity:  None
Events:            <none>

apiVersion: extensions/v1beta1 kind: Ingress Metadata: name: zipkin labels: app.kubernetes.io/name: zipkin app.kubernetes.io/instance: zipkin app.kubernetes.io/managed-by: zipkin annotations: kubernetes.io/ingress.class: Nginx kubernetes.io/tls-acme: "true" Nginx.ingress.kubernetes.io/rewrite-target: /$1 Nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" Nginx.ingress.kubernetes.io/proxy-body-size: "0" Nginx.ingress.kubernetes.io/cors-allow-methods: "PUT,GET,POST,OPTIONS,DELETE" Nginx.ingress.kubernetes.io/cors-allow-origin: "*" Nginx.ingress.kubernetes.io/enable-cors: "true" spec: tls: - hosts: - ns-zipkin.my-host secretName: .my-host rules: - host: ns-zipkin.my-host http: paths: - path: /zipkin/?(.*) backend: serviceName: zipkin servicePort: 80

$ kubectl -n ns-zipkin describe ingress

解决方法

您的服务需要在广告连播上显示以下标签:

selector:
  app.kubernetes.io/name: zipkin
  app.kubernetes.io/instance: zipkin
  app: zipkin

尽管看起来您在zipkin吊舱上只有一个标签:

labels:
    app: zipkin

标签选择器使用逻辑AND(&&),这意味着指定的所有标签都必须位于容器上才能与之匹配。

,

以下工作。抱歉,我无法提供所有详细信息,因为我不知道它们:(也许其他人可以。

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: zipkin
  labels:
    app.kubernetes.io/name: zipkin
    app.kubernetes.io/instance: zipkin
    app: zipkin
spec:
  replicas: 1
  selector:
    matchLabels:
      app: zipkin
  template:
    metadata:
      name: zipkin
      labels:
        app: zipkin
    spec:
      containers:
        - name: zipkin
          image: openzipkin/zipkin:2.21
          imagePullPolicy: Always
          ports:
            - containerPort: 9411
              protocol: TCP
          env:
          - name: STORAGE_TYPE
            value: elasticsearch
          - name: ES_HOSTS
            value: https://my-es-host:9243
          - name: ES_USERNAME
            value: myUser
          - name: ES_PASSWORD
            value: myPassword
          - name: ES_HTTP_LOGGING
            value: HEADERS
          readinessProbe:
            httpGet:
              path: /api/v2/services
              port: 9411
            initialDelaySeconds: 5
            timeoutSeconds: 3
            

service.yaml

apiVersion: v1
kind: Service
metadata:
  name: zipkin
  labels:
    app.kubernetes.io/name: zipkin
    app.kubernetes.io/instance: zipkin
    app: zipkin
spec:
  type: ClusterIP
  ports:
    - port: 9411
      targetPort: 9411
      protocol: TCP
      name: http  <-- DELETED
  selector:
    app.kubernetes.io/name: zipkin    <-- DELETED
    app.kubernetes.io/instance: zipkin    <-- DELETED
    app: zipkin
    
            

ingress.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: zipkin
  labels:
    app.kubernetes.io/name: zipkin
    app.kubernetes.io/instance: zipkin
    app.kubernetes.io/managed-by: zipkin
  annotations:
    kubernetes.io/ingress.class: nginx
    kubernetes.io/tls-acme: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /$1    <-- DELETED
    nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
    nginx.ingress.kubernetes.io/proxy-body-size: "0"
    nginx.ingress.kubernetes.io/cors-allow-methods: "PUT,GET,POST,OPTIONS,DELETE"
    nginx.ingress.kubernetes.io/cors-allow-origin: "*"
    nginx.ingress.kubernetes.io/enable-cors: "true"
spec:
  tls:
    - hosts:
        - ns-zipkin.my-host
      secretName: .my-host
  rules:
    - host: ns-zipkin.my-host
      http:
        paths:
          - path: /  <-- CHANGED
            backend:
              serviceName: zipkin
              servicePort: 9411   <-- CHANGED