emissary-ingress / emissary

open source Kubernetes-native API gateway for microservices built on the Envoy Proxy
https://www.getambassador.io
Apache License 2.0
4.37k stars 687 forks source link

TracingService not using default namespace #2843

Closed lduparc closed 4 years ago

lduparc commented 4 years ago

Installing ambassador in default namespace everything seems to be working. I created a TracingService linked with Zipkin following documentation and it works.

But Installing ambassador in a different namespace (Eg: gateway) with zipkin in namespace gateway, Nothing appear on Zipkin, It seems that TracingService does not catch requests on aabassador...

See below my ambassador config:

---
# Default values for ambassador.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.

# Manually set metadata for the Release.
#
# Defaults to .Chart.Name
nameOverride: "gateway"
# Defaults to .Release.Name-.Chart.Name unless .Release.Name contains "ambassador"
fullnameOverride: "gateway"

replicaCount: 1
daemonSet: true

# Enable autoscaling using HorizontalPodAutoscaler
# daemonSet: true, autoscaling will be disabled
autoscaling:
  enabled: false
  minReplicas: 3
  maxReplicas: 6
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 60
  - type: Resource
    resource:
      name: memory
      target:
        type: Utilization
        averageUtilization: 60

podDisruptionBudget: {}

namespace:
  name: gateway

# Additional container environment variable
# Uncomment or add additional environment variables for the container here.
env:
  # Exposing statistics via StatsD
  # STATSD_ENABLED: true
  # STATSD_HOST: statsd-sink
  # sets the minimum number of seconds between Envoy restarts
  # AMBASSADOR_RESTART_TIME: 15
  # sets the number of seconds that the Envoy will wait for open connections to drain on a restart
  # AMBASSADOR_DRAIN_TIME: 5
  # sets the number of seconds that Ambassador will wait for the old Envoy to clean up and exit on a restart
  # AMBASSADOR_SHUTDOWN_TIME: 10
  # labels Ambassador with an ID to allow for configuring multiple Ambassadors in a cluster
  AMBASSADOR_ID: gateway

# Additional container environment variable in raw YAML format
# Uncomment or add additional environment variables for the container here.
envRaw: {}
# - name: REDIS_PASSWORD
#   value: password
#   valueFrom:
#     secretKeyRef:
#       name: redis-password
#       key: password
# - name: POD_IP
#   valueFrom:
#     fieldRef:
#       fieldPath: status.podIP

imagePullSecrets: []

security:
  # Security Context for all containers in the pod.
  # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#podsecuritycontext-v1-core
  podSecurityContext:
    runAsUser: 8888
  # Security Context for the Ambassador container specifically
  # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#securitycontext-v1-core
  containerSecurityContext:
    allowPrivilegeEscalation: false
  # A basic PodSecurityPolicy to ensure Ambassador is running with appropriate security permissions
  # https://kubernetes.io/docs/concepts/policy/pod-security-policy/
  #
  # A set of reasonable defaults is outlined below. This is not created by default as it should only
  # be created by a one Release. If you want to use the PodSecurityPolicy in the chart, create it in
  # the "master" Release and then leave it unset in all others. Set the `rbac.podSecurityPolicies` 
  # in all non-"master" Releases.
  podSecurityPolicy: []
    # # Add AppArmor and Seccomp annotations
    # # https://kubernetes.io/docs/concepts/policy/pod-security-policy/#apparmor
    # annotations:
    # spec:
    #   seLinux:
    #     rule: RunAsAny
    #   supplementalGroups:
    #     rule: 'MustRunAs'
    #     ranges:
    #       # Forbid adding the root group.
    #       - min: 1
    #         max: 65535
    #   fsGroup:
    #     rule: 'MustRunAs'
    #     ranges:
    #       # Forbid adding the root group.
    #       - min: 1
    #         max: 65535
    #   privileged: false
    #   allowPrivilegeEscalation: false
    #   runAsUser:
    #     rule: MustRunAsNonRoot

image:
  repository: docker.io/datawire/aes
  tag: 1.5.4
  pullPolicy: IfNotPresent

dnsPolicy: "ClusterFirst"
hostNetwork: false

service:
  type: LoadBalancer

  # Note that target http ports need to match your ambassador configurations service_port
  # https://www.getambassador.io/reference/modules/#the-ambassador-module
  ports:
    - name: http
      port: 80
      targetPort: 8080
      # protocol: TCP
      # nodePort: 30080
      # hostPort: 80
    - name: https
      port: 443
      targetPort: 8443
      # protocol: TCP
      # nodePort: 30443
      # hostPort: 443
    # TCPMapping_Port
      # port: 2222
      # targetPort: 2222
      # protocol: TCP
      # nodePort: 30222

  externalTrafficPolicy:

  externalIPs: []

  annotations: 
  #############################################################################
  ## Ambassador should be configured using CRD definition. If you want
  ## to use annotations, the following is an example of annotating the
  ## Ambassador service with global configuration manifest.
  ##
  ## See https://www.getambassador.io/reference/core/ambassador and
  ## https://www.getambassador.io/reference/core/tls for more info
  #############################################################################
  #
   getambassador.io/config: |
        ---
        apiVersion: getambassador.io/v2
        kind: Module
        name: ambassador
        ambassador_id: gateway
        config:
          diagnostics:
            enabled: false
        ---
        apiVersion: getambassador.io/v2
        kind: TLSContext
        name: ambassador
        ambassador_id: gateway
        secret: dev-wildcard-cert
        hosts: ["*.dev.example.com"]
        ---
        apiVersion: getambassador.io/v2
        kind:  Mapping
        name:  metrics
        prefix: /metrics
        rewrite: ""
        ambassador_id: gateway
        service: gateway-admin.gateway:8877
        host: dev.example.com
        circuit_breakers:
            - max_retries: 3
        ---
        apiVersion: getambassador.io/v2
        kind:  Mapping
        name:  diag
        prefix: /
        ambassador_id: gateway
        rewrite: /ambassador/v0/diag/
        service: gateway-admin.gateway:8877
        host: dev.example.com
        circuit_breakers:
            - max_retries: 3
        ---
        apiVersion: getambassador.io/v2
        kind:  Mapping
        name:  dashboard
        prefix: /
        ambassador_id: gateway
        service: kubernetes-dashboard.kubernetes-dashboard:443
        tls: true
        host: dashboard.dev.example.com
        circuit_breakers:
            - max_retries: 3
        cors:
            origins: "*"
            methods: POST, GET, OPTIONS, PUT, DELETE
            credentials: true
            max_age: "86400"
        ---
        apiVersion: getambassador.io/v2
        kind:  Mapping
        name:  grafana
        prefix: /
        ambassador_id: gateway
        service: loki-grafana.monitoring:80
        host: grafana.dev.example.com
        circuit_breakers:
            - max_retries: 3

adminService:
  create: true
  type: ClusterIP
  port: 8877
  # NodePort used if type is NodePort
  # nodePort: 38877
  annotations:
    {}

rbac:
  # Specifies whether RBAC resources should be created
  create: true
  # List of Pod Security Policies to use on the container.
  # If security.podSecurityPolicy is set, it will be appended to the list
  podSecurityPolicies: []
  # Name of the RBAC resources defaults to the name of the release.
  # Set nameOverride when installing Ambassador with cluster-wide scope in
  # different namespaces with the same release name to avoid conflicts.
  nameOverride:

scope:
  # tells Ambassador to only use resources in the namespace or namespace set by namespace.name
  singleNamespace: false

serviceAccount:
  # Specifies whether a service account should be created
  create: true
  # The name of the service account to use.
  # If not set and create is true, a name is generated using the fullname template
  name:

deploymentStrategy:
  type: RollingUpdate

restartPolicy:

initContainers: []

sidecarContainers: []

livenessProbe:
  initialDelaySeconds: 30
  periodSeconds: 3
  failureThreshold: 3

readinessProbe:
  initialDelaySeconds: 30
  periodSeconds: 3
  failureThreshold: 3

volumes: []

volumeMounts: []

podLabels:
  {}

podAnnotations:
  {}
  # prometheus.io/scrape: "true"
  # prometheus.io/port: "9102"

deploymentAnnotations:
  {}
  # configmap.reloader.stakater.com/auto: "true"

resources:
  # Recommended resource requests and limits for Ambassador
  limits:
    cpu: 1000m
    memory: 1Gi
  requests:
    cpu: 200m
    memory: 300Mi

priorityClassName: ""

nodeSelector: {}

tolerations: []

affinity: {}

ambassadorConfig: ""

crds:
  enabled: true
  create: true
  keep: false

# Prometheus Operator ServiceMonitor configuration
# See documentation: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#servicemonitor
metrics:
  serviceMonitor:
    enabled: false
    # interval: 30s
    # scrapeTimeout: 30s
    # selector: {}

################################################################################
## Ambassador Edge Stack Configuration                                        ##
################################################################################

# The Ambassador Edge Stack is free for limited use without a license key.
# Go to https://{ambassador-host}/edge_stack/admin/#dashboard to register
# for a community license key.

enableAES: true

# Set createSecret: false is installing multiple releases of The Ambassador
# Edge Stack in the same namespace.
licenseKey:
  value: "XXXXXXXXXXX"
  createSecret: true
  secretName: ambassador-licence

# The DevPortal is exposed at /docs/ endpoint in the AES container. 
# Setting this to true will automatically create routes for the DevPortal.
createDevPortalMappings: true

# The Ambassador Edge Stack uses a redis instance for managing authentication,
# rate limiting, and sharing minor configuration details between pods for
# centralized management. These values configure the redis instance that ships
# by default with The Ambassador Edge Stack.
#
# URL of your redis instance. Defaults to redis instance created below.
redisURL:

# Ambassador ships with a basic redis instance. Configure the deployment with the options below.
redis:
  create: true
  # Annotations for Ambassador Pro's redis instance.
  annotations:
    deployment:
      {}
    service:
      {}
  resources: {}
  # If you want to specify resources, uncomment the following
  # lines and remove the curly braces after 'resources:'.
  # These are placeholder values and must be tuned.
  #   limits:
  #     cpu: 100m
  #     memory: 256Mi
  #   requests:
  #     cpu: 50m
  #     memory: 128Mi
  nodeSelector: {}

# Configures the AuthService that ships with the Ambassador Edge Stack.
# Setting authService.create: false will not install the AES AuthService and
# allow you to define your own.
#
# Typically when using the AES, you will want to keep this set to true and use 
# the External Filter to communicate with a custom authentication service.
# https://www.getambassador.io/reference/filter-reference/#filter-type-external
authService:
  create: true
  # Set additional configuration options. See https://www.getambassador.io/reference/services/auth-service for more information
  optional_configurations:
    # include_body:
    #   max_bytes: 4096
    #   allow_partial: true
    # status_on_error:
    #   code: 403
    # failure_mode_allow: false
    # retry_policy:
    #   retry_on: "5xx"
    #   num_retries: 2
    # add_linkerd_headers: true
    # timeout_ms: 30000

# Configures the RateLimitService in the Ambassador Edge Stack. 
# Keep this enabled to configure RateLimits in AES.
rateLimit:
  create: true

# Projects are a beta feature of Ambassador that allow developers to stage and
# deploy code with nothing more than a Github repository.
# See: https://www.getambassador.io/docs/latest/topics/using/projects/
registry:
  create: false

################################################################################
## DEPRECATED configuration objects                                           ##
################################################################################

# DEPRECATED: Ambassador now exposes the /metrics endpoint in Envoy.
# DEPRECATED: See https://www.getambassador.io/user-guide/monitoring#deployment for more information on how to use the /metrics endpoint
#
# DEPRECATED: Enabling the prometheus exporter creates a sidecar and configures ambassador to use it
prometheusExporter:
  enabled: false
  repository: prom/statsd-exporter
  tag: v0.8.1
  pullPolicy: IfNotPresent
  resources: {}
  # If you do want to specify resources, uncomment the following
  # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
  #   limits:
  #     cpu: 100m
  #     memory: 256Mi
  #   requests:
  #     cpu: 50m
  #     memory: 128Mi
  # You can configure the statsd exporter to modify the behavior of mappings and other features.
  # See documentation: https://github.com/prometheus/statsd_exporter/tree/v0.8.1#metric-mapping-and-configuration
  # Uncomment the following line if you wish to specify a custom configuration:
  # configuration: |
  #   ---
  #   mappings:
  #   - match: 'envoy.cluster.*.upstream_cx_connect_ms'
  #     name: "envoy_cluster_upstream_cx_connect_time"
  #     timer_type: 'histogram'
  #     labels:
  #       cluster_name: "$1"

# DEPRECATED: Use security.podSecurityContext
# securityContext:
#   runAsUser: 8888 

# Configures Service Preview that ships with the Ambassador Edge Stack and edgectl.
# Setting servicePreview.enabled: true will install the Traffic Agent Service Account, Traffic Manager with RBAC, and ambassador-injector
servicePreview:
  enabled: true
  trafficManager:
    image:
      # Leave blank to use image.repository and image.tag
      repository:
      tag:
    serviceAccountName: "traffic-manager"
  trafficAgent:
    image:
      # Leave blank to use image.repository and image.tag
      repository:
      tag:
    singleNamespace: false
    serviceAccountName: "traffic-agent"
    port: 9900

    # Configure the ambassador-injector webhook for Service Preview Traffic Agent automatic sidecar injection.
    injector:
      enabled: true

      # If no injector.crtPEM and injector.keyPEM are provided, a self-signed certificate will be issued
      # for the Common Name (CN) of `<ambassador-injector>.<namespace>.svc`, which is the cluster-internal DNS name
      # for the service.
      crtPEM: ""
      keyPEM: ""

Expected behavior I would like see all my request on zipkin but nothing appear and if I install ambassador using helm without --namespace (even with namespace.name: gateway in values.yaml), ambassador is installed under namespace default.

Versions

lduparc commented 4 years ago

Sorry it was related to a wrong network config on my side. I close it