apiVersion: apps/v1
kind: Deployment
metadata:
  name: apisix-dashboard
  namespace: apisix
  labels:
    app: apisix-dashboard
spec:
  replicas: 1
  selector:
    matchLabels:
      app: apisix-dashboard
  template:
    metadata:
      labels:
        app: apisix-dashboard
    spec:
      containers:
        - name: apisix-dashboard
          image: apache/apisix-dashboard:3.0.1-alpine
          ports:
            - name: http
              containerPort: 9000
              protocol: TCP
          livenessProbe:
            httpGet:
              path: /ping
              port: http
              scheme: HTTP
            timeoutSeconds: 1
            periodSeconds: 10
            successThreshold: 1
            failureThreshold: 3
          readinessProbe:
            httpGet:
              path: /ping
              port: http
              scheme: HTTP
            timeoutSeconds: 1
            periodSeconds: 10
            successThreshold: 1
            failureThreshold: 3
          resources:
            requests:
              cpu: 250m
              memory: 512Mi
            limits:
              cpu: 250m
              memory: 512Mi
          volumeMounts:
            - name: apisix-dashboard-config
              mountPath: /usr/local/apisix-dashboard/conf/conf.yaml
              subPath: conf.yaml
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
      dnsPolicy: ClusterFirst
      serviceAccountName: apisix-dashboard
      serviceAccount: apisix-dashboard
      volumes:
        - name: apisix-dashboard-config
          configMap:
            name: dashboard-conf
            defaultMode: 420
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: dashboard-conf
  namespace: apisix
  labels:
    app: apisix-dashboard
data:
  conf.yaml: |-
    conf:
      listen:
        host: 0.0.0.0
        port: 9000
      etcd:
        endpoints:
          - apisix-etcd.apisix.svc.cluster.local:2379
      log:
        error_log:
          level: warn
          file_path: /dev/stderr
        access_log:
          file_path: /dev/stdout
    
    authentication:
      secert:
        secert
      expire_time: 3600
      users:
        - username: admin
          password: Q39sTi0i^9Q39sTi

    plugins:
      - api-breaker
      - authz-casbin
      - authz-casdoor
      - authz-keycloak
      - aws-lambda
      - azure-functions
      - basic-auth
      # - batch-requests
      - clickhouse-logger
      - client-control
      - consumer-restriction
      - cors
      - csrf
      - datadog
      # - dubbo-proxy
      - echo
      - error-log-logger
      # - example-plugin
      - ext-plugin-post-req
      - ext-plugin-post-resp
      - ext-plugin-pre-req
      - fault-injection
      - file-logger
      - forward-auth
      - google-cloud-logging
      - grpc-transcode
      - grpc-web
      - gzip
      - hmac-auth
      - http-logger
      - ip-restriction
      - jwt-auth
      - kafka-logger
      - kafka-proxy
      - key-auth
      - ldap-auth
      - limit-conn
      - limit-count
      - limit-req
      - loggly
      # - log-rotate
      - mocking
      # - node-status
      - opa
      - openid-connect
      - opentelemetry
      - openwhisk
      - prometheus
      - proxy-cache
      - proxy-control
      - proxy-mirror
      - proxy-rewrite
      - public-api
      - real-ip
      - redirect
      - referer-restriction
      - request-id
      - request-validation
      - response-rewrite
      - rocketmq-logger
      - server-info
      - serverless-post-function
      - serverless-pre-function
      - skywalking
      - skywalking-logger
      - sls-logger
      - splunk-hec-logging
      - syslog
      - tcp-logger
      - traffic-split
      - ua-restriction
      - udp-logger
      - uri-blocker
      - wolf-rbac
      - zipkin

---
apiVersion: v1
kind: Service
metadata:
  name: apisix-dashboard
  namespace: apisix
  labels:
    app: apisix-dashboard
spec:
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: http
  selector:
    app: apisix-dashboard
  type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: apisix-ingress
  namespace: apisix
  annotations:
    kubernetes.io/ingress.class: "gce"
spec:
  tls:
    - hosts:
        - apisix-dashboard.pingcap.net
      secretName: apisix-secret
  rules:
    - host: apisix-dashboard.pingcap.net
      http:
        paths:
          - path: /*
            pathType: ImplementationSpecific
            backend:
              service:
                name: apisix-dashboard
                port:
                  number: 80
---
apiVersion: v1
kind: Secret
metadata:
  name: apisix-secret
  namespace: apisix
data:
  tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUdmRENDQldTZ0F3SUJBZ0lRQkVDTThMMWV5d0g1TXBEbWdNVERTREFOQmdrcWhraUc5dzBCQVFzRkFEQloKTVFzd0NRWURWUVFHRXdKRFRqRWxNQ01HQTFVRUNoTWNWSEoxYzNSQmMybGhJRlJsWTJodWIyeHZaMmxsY3l3ZwpTVzVqTGpFak1DRUdBMVVFQXhNYVZISjFjM1JCYzJsaElFOVdJRlJNVXlCUWNtOGdRMEVnUnpNd0hoY05Nak13Ck5qQTFNREF3TURBd1doY05NalF3TmpJek1qTTFPVFU1V2pCMU1Rc3dDUVlEVlFRR0V3SkRUakVTTUJBR0ExVUUKQ0F3SjVZeVg1THFzNWJpQ01Ub3dPQVlEVlFRS0V6RkNaV2xxYVc1bklGQnBibWREWVhBZ1dHbHVaMk5vWlc0ZwpWR1ZqYUNCaGJtUWdSR1YyY0hRZ1EyOHVMQ0JNZEdRdU1SWXdGQVlEVlFRRERBMHFMbkJwYm1kallYQXVibVYwCk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBNDhkQ3ZzZTQzTmhTVnNaTmZxT2gKbHhSeWNwcjJ6Wm5DVVNHMkUwYXZaaUdxMHBLZS9EUjV1MGFnY3Nvc2xuS1V4Z3NxdVlYaHZKeURURDdEV3VrZAowbVB1QUQ0dGdINmxaWVFIdm9nM2RjVGRPYjYxUGdnTW53QUlLMkZiZml0NmhiZlcrSDQvVWFmUDVpdlZIVStECmZGZmlrM1M1Y0hXOEg3NFVONzJzVWM4OGFaWFZEK0JKNmxXdmFVWllSOHh3WXhDMm9jOG9meGRuSDZxS2Q4SnAKTGExWlRCU2lreFBtTVNBZGlmV2xrUXdWNExjYi91RTZBb3JmQ0xrL0V4RXpFMmxhYytWZFdwVG1EdUVPRmxPawpZSW9TRmtPZUUzOHptOEZVaFFaSTNQWnZsbDZsemk3MHRHVXpOdW50UzJQZm1WZzJMWklKUVU1eEllQ3JXSTI4Ckd3SURBUUFCbzRJRElqQ0NBeDR3SHdZRFZSMGpCQmd3Rm9BVW10a05FTW5FWDB3eTB1ZndHNjFLcGkwbE85UXcKSFFZRFZSME9CQllFRkZCZzBObUFaVjdnZ0dOQzBUcGFvT2grY2JOM01DVUdBMVVkRVFRZU1CeUNEU291Y0dsdQpaMk5oY0M1dVpYU0NDM0JwYm1kallYQXVibVYwTUE0R0ExVWREd0VCL3dRRUF3SUZvREFkQmdOVkhTVUVGakFVCkJnZ3JCZ0VGQlFjREFRWUlLd1lCQlFVSEF3SXdRUVlEVlIwZkJEb3dPREEyb0RTZ01vWXdhSFIwY0RvdkwyTnkKYkM1a2FXZHBZMlZ5ZEM1amJpOVVjblZ6ZEVGemFXRlBWbFJNVTFCeWIwTkJSek11WTNKc01ENEdBMVVkSUFRMwpNRFV3TXdZR1o0RU1BUUlDTUNrd0p3WUlLd1lCQlFVSEFnRVdHMmgwZEhBNkx5OTNkM2N1WkdsbmFXTmxjblF1ClkyOXRMME5RVXpCMUJnZ3JCZ0VGQlFjQkFRUnBNR2N3SXdZSUt3WUJCUVVITUFHR0YyaDBkSEE2THk5dlkzTncKTG1ScFoybGpaWEowTG1OdU1FQUdDQ3NHQVFVRkJ6QUNoalJvZEhSd09pOHZZMkZqWlhKMGN5NWthV2RwWTJWeQpkQzVqYmk5VWNuVnpkRUZ6YVdGUFZsUk1VMUJ5YjBOQlJ6TXVZM0owTUFrR0ExVWRFd1FDTUFBd2dnRi9CZ29yCkJnRUVBZFo1QWdRQ0JJSUJid1NDQVdzQmFRQjJBTzdOMEdUVjJ4ck94VnkzbmJUTkU2SXloMFo4dk96ZXcxRkkKV1VaeEg3V2JBQUFCaUluUUVnUUFBQVFEQUVjd1JRSWdTakRTN1ZDdTlsY2x0b0pLWkd2RFlianJKQ1Vtd250dwo0WWJtbEMzSFhIWUNJUURhZUJxYWNaK3psZDNtU05rd2RRS2lTM2U3cnJIYkNMbzRhQkd4cHF2SThRQjJBRWl3CjQydmFwa2MwRCtWcUF2cWRNT3NjVWdITFZ0MHNnZG03djZzNTJJUnpBQUFCaUluUUVqVUFBQVFEQUVjd1JRSWcKUitlVzVQOHB3eEVkNWI5ZzJhN0VsaGhIQzNMbVBkT3JmbnNxcEc3QThKY0NJUUQ2Y3JLY2RmbU9ncWNoTkFHVgpINnVjdkI2cExvNUJoZ1RvWnRBNzZzNDZsd0IzQU5xMnYycy90YllpbjV2Q3UxeHI2SENSY1d5N1VZU0ZOTDJrClBUQkkxL3VyQUFBQmlJblFFaFFBQUFRREFFZ3dSZ0loQVBLUUoxbVN0dW9HZlJ3KzhOZkp1bDcxdUN3N1JBWnQKOHhiMThRaTd3cHVTQWlFQXhGSGIrR0NONWMwWGZOYjhQZWRSSUdUWEU4UG1ZcFRkKytQV3pxcmRsY0l3RFFZSgpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFNT0J5N3pCaGpEeTM3QzAxQjJ6S1FIRXpsb09JRlBtUGs1TFI2K1VMNFg3Cjczc0FVMm9HbEVvTCt4YWtUSk5DR1ppRTFhakVUcnNTZFVHMzJzR2RmOUNjL3ppOWpVcVhLeXEwbU44L0JwVmoKaUFDK0plVnNuc1NhVENxa2grR0NmZWIxcnJpTDVXT1M2RE1ENWVHSGVyS1ZXVU5WdmV5bTNBci9MUTVQaUI0UgpJTUZCQzRjNWN3OVpzR3NHYzNpZnZzenR5UXFHSXNoZXpXSm1HR1hQaFRTSityT2p2WE1wNWxaNTNxSHhYWFYxCjY3UGExQm9Ta2hBbzF2SVVPbmhMdndOaS9nNGtVYmo1eldOQm05cXZRMSs5c1BSaXlJRGxnenNlaUZPd25FZVkKdGhoRGJud3ZsaEdOQmpvdEd1QlpnU0Nvc1BvbHFzNFlSSDdpa0NBRERqND0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRkZUQ0NBLzJnQXdJQkFnSVFBMmVLRmsxaWZSRHVmVzRDRHNjZWVUQU5CZ2txaGtpRzl3MEJBUXNGQURCaApNUXN3Q1FZRFZRUUdFd0pWVXpFVk1CTUdBMVVFQ2hNTVJHbG5hVU5sY25RZ1NXNWpNUmt3RndZRFZRUUxFeEIzCmQzY3VaR2xuYVdObGNuUXVZMjl0TVNBd0hnWURWUVFERXhkRWFXZHBRMlZ5ZENCSGJHOWlZV3dnVW05dmRDQkQKUVRBZUZ3MHlNREF6TVRNeE1qQXhNemxhRncwek1EQXpNVE14TWpBeE16bGFNRmt4Q3pBSkJnTlZCQVlUQWtOTwpNU1V3SXdZRFZRUUtFeHhVY25WemRFRnphV0VnVkdWamFHNXZiRzluYVdWekxDQkpibU11TVNNd0lRWURWUVFECkV4cFVjblZ6ZEVGemFXRWdUMVlnVkV4VElGQnlieUJEUVNCSE16Q0NBU0l3RFFZSktvWklodmNOQVFFQkJRQUQKZ2dFUEFEQ0NBUW9DZ2dFQkFOSWRyK2FHSjd4R1UrQkFmVGZPVUhzTzBrTEhCWERpL1oyb2xOZ0Y2MmZPbEpHcApUTFhNa2VxdTgyd01wUWY4blVpOFBCRWltS1N0b2NCN3BqcUo3dHd2ZUxEbzE4aC84UzU0em9IQ3NmWnU1bjUyCnVrd3R4RW1NVlNVTFpmUlcwcFZQWGZpalJzRmZDOHppdkMvQWZObXFkZ1Rub2pmS3ZsbW05STBWZ3NONU81ZmwKOXJaT2N5TzBXNzByYnNpNkdURnNNWkRSREZ2SytFemZyZ0ZORm5TK3FyU2VrZXNDSnJPUHByT3NxNVhIeDF2YwplTEo0Z3pnd0MrT21Fb3dtdjlRV3YwLytNV0prUXlSSmVzRmZVbHhjdWdzbU1EM3BsMHpSejJLSW5yakszcEtKCk9kalk2Y2NYMnQvSVhsM0w0SVF1YzVWN0hPcHVhemlzM1pwZFN1VUNBd0VBQWFPQ0FjOHdnZ0hMTUIwR0ExVWQKRGdRV0JCU2EyUTBReWNSZlRETFM1L0FiclVxbUxTVTcxREFmQmdOVkhTTUVHREFXZ0JRRDNsQTFWdEZNdTJidwpvK0liRzhPWHNqM1JWVEFPQmdOVkhROEJBZjhFQkFNQ0FZWXdIUVlEVlIwbEJCWXdGQVlJS3dZQkJRVUhBd0VHCkNDc0dBUVVGQndNQ01CSUdBMVVkRXdFQi93UUlNQVlCQWY4Q0FRQXdNd1lJS3dZQkJRVUhBUUVFSnpBbE1DTUcKQ0NzR0FRVUZCekFCaGhkb2RIUndPaTh2YjJOemNDNWthV2RwWTJWeWRDNWpiakJBQmdOVkhSOEVPVEEzTURXZwpNNkF4aGk5b2RIUndPaTh2WTNKc0xtUnBaMmxqWlhKMExtTnVMMFJwWjJsRFpYSjBSMnh2WW1Gc1VtOXZkRU5CCkxtTnliRENCemdZRFZSMGdCSUhHTUlIRE1JSEFCZ1JWSFNBQU1JRzNNQ2dHQ0NzR0FRVUZCd0lCRmh4b2RIUncKY3pvdkwzZDNkeTVrYVdkcFkyVnlkQzVqYjIwdlExQlRNSUdLQmdnckJnRUZCUWNDQWpCK0RIeEJibmtnZFhObApJRzltSUhSb2FYTWdRMlZ5ZEdsbWFXTmhkR1VnWTI5dWMzUnBkSFYwWlhNZ1lXTmpaWEIwWVc1alpTQnZaaUIwCmFHVWdVbVZzZVdsdVp5QlFZWEowZVNCQlozSmxaVzFsYm5RZ2JHOWpZWFJsWkNCaGRDQm9kSFJ3Y3pvdkwzZDMKZHk1a2FXZHBZMlZ5ZEM1amIyMHZjbkJoTFhWaE1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQTZNS1V1SVJSQwpuanFPUGMvamhyQjVWRGNyekhSYWJwNWhhRXZwWlYrU1IyTSt3UXdqT1ovdGY3S2hFWVhiQkI3ZVVRcFBVUTNJClRSZzFDZGpHVDNsaTJWQzJ4c1ZMRVNiQkdrYTM0bnl2THJJQ1BRNk1tN3ZOcWkrR2pSdHVaMUNUM1lVN05wYUoKS3UzNHk3emtBdFdLbGVmTEwxdzNubjBnK1hreEMydVY1UEQ3VWEvUS9rY1lneGpqODNrbHhLdHMwWUNxaGFWSgowUVlic0RTMTRKNDhDR29SN1hmMUp3Ylo5Y29VdEI1RklJNnpVRnV2SDlwMFBvZ0g3TGdBbE9NKzl6TnlVWm8rCldtSVVKMDRyWmJKL2hIdVhnT3RlSEVOWXR6cXI2UEdSWVJ1QUZkVVBPWlNzTThTNkRncDA0VktlN09jRDI4MVEKSC9OYTJBMENMME5XCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0=
  tls.key: LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2UUlCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktjd2dnU2pBZ0VBQW9JQkFRRGp4MEsreDdqYzJGSlcKeGsxK282R1hGSEp5bXZiTm1jSlJJYllUUnE5bUlhclNrcDc4TkhtN1JxQnl5aXlXY3BUR0N5cTVoZUc4bklOTQpQc05hNlIzU1krNEFQaTJBZnFWbGhBZStpRGQxeE4wNXZyVStDQXlmQUFncllWdCtLM3FGdDliNGZqOVJwOC9tCks5VWRUNE44VitLVGRMbHdkYndmdmhRM3ZheFJ6enhwbGRVUDRFbnFWYTlwUmxoSHpIQmpFTGFoenloL0YyY2YKcW9wM3dta3RyVmxNRktLVEUrWXhJQjJKOWFXUkRCWGd0eHYrNFRvQ2l0OEl1VDhURVRNVGFWcHo1VjFhbE9ZTwo0UTRXVTZSZ2loSVdRNTRUZnpPYndWU0ZCa2pjOW0rV1hxWE9MdlMwWlRNMjZlMUxZOStaV0RZdGtnbEJUbkVoCjRLdFlqYndiQWdNQkFBRUNnZ0VBTHZYTVlYZmN1WTlSdm5rb3pmU2ZZbjRCTUhhWmJuOEdUR0xHWG9nQ3Jtdy8KZ3lWZWFNSEszUnp0QkcyQkxzMVZ0ZFRrakpZNUdZRXRJcUdIOWl5OGpMMDBldEZXNFRoN0VnaGI3bUM0Q213NQpiZWZQQndoeXphOGNnQkVVNDFqRWJHQWdEbUE4M3JGWnorcjJoNUgybWtLbVFGOWV3ZnhMK2tGZWVyVjhtdXJhCndYVzVSQmt4R01zOUVBOEtjcXpBME04dE1DMkViZVRacVFzRjdMejg0Q2xycC9EQWhyRWFWZXNDM0ZvcnBzQ24KeUhrUnJDYk1kVmNGK2tnd29LOUlneFRaUTJvWEk1OFM1endJS2t2N1lMdmQ5ZUljdm9rekFKanU4SWl4VnMvbgp0ejFiWGRoVFRBTDFIRjVNVHNoNVB6TUNsZ0ZZeDNhWHRzMFRuUCtyS1FLQmdRRDNGVkx2UmR0R3Y2R1plOVpTCkNKb0pSY1B2b1NrVWhQbkVXWENhWnkzN0tKUzFOR01iQzQ1dFlvUWNmUmxtNjBwYUptUVNVS0ovS0Z6QUpGSUsKTjd3UStHWEF6UHpGU0pDWkYzdTZmek84N1Vrak9TangzV0haOHZhS2JMbkkxbmEzYldxMFZTcTVDeDRmQm43TApkeE1Ed1o0Q0p4T1U2NHpUOHFITTRvVUcwd0tCZ1FEci81YWVqVzJ1TGwwQ1B0NTcrQWRmN3JOS0NEUml0bFFGCmk4OU9QcFdYeERLaFNCWGM2ZysxR0hCSGJraklFZndVVWh3ejlOQWluS2FVSEVQQ09LeiswZE03WGh1eFRiUnAKTVBuM1hFWGpvTnFnUWcrYTk0czQzY0piZmxNdzA5dmdUamhOSnc3MFNxbHdZTkhqRENwdkhQSFlPa3U4NVR2SwpDdzA0Y0NlNG1RS0JnRzNJVkx3cG5yODFvQml4RkU0SXNtQlNWamVmdE1BQVFYWERnNnVuRXFBWXJOSkNmNUpoCnRSdlcvUG9uZjJUaVFId0R1TTBHZE56bzB5VXdQaDk2R2g2MEw0blZ5cTNoaXhYcWdEZ2lFcHZzRm1ZSEhMRXkKZXlxNnNGNWE1c1ZjdlF6TkdlOGNORXBaclQxOXhsS2pDcGpOcTJZcmRLRGpkQVFzTjBYd2s4aXZBb0dBSXMyNQpwNzVSdTR0STJpanRaTGpxVllKOVhHQ2pZUjlrZXNEb25MQnNIVXFvOE5JUnIxZXhZMUtzVkV4MlhWTVJxdW1GCkVVQjhaVzVXdnFjQWN5Y3FsQlhib2ZpNStzYnI0VXVBd2JNUTk0WGtXQmdGOXlPa200bFF2VzkrMDBlYk9KUXcKaDJoSU0wekRlamc5RzgvU2ZqcDFqQjdreG9IRDlJTDJ1eWtISXBrQ2dZRUF0M0FRTERHRm1SSWlwUHBBTVdRKwp4bitONGRTUE04cHZ3dFBIdml4NTN6LzNhVUpta1RIOE9QYW9kMkgwRkVQUEZFUEMrUzg5LzNhWW5kVDFRM2pXClBQTXUvK2IrbGg1Uk05cHIzUjZ4blFPUTJ3bUhhb2E5VXRsQ21ma3Q2cjllYThHalBTbkZjSFJZYnl3aXRJVFEKd1JkY0NHNk9GWUtEdExENlZMWmZvNFE9Ci0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0=
type: kubernetes.io/tls
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: apisix-dashboard
  namespace: apisix