---
kind: GatewayClass
apiVersion: networking.x-k8s.io/v1alpha1
metadata:
  name: my-gateway-class
spec:
  controller: traefik.io/gateway-controller

---
kind: Gateway
apiVersion: networking.x-k8s.io/v1alpha1
metadata:
  name: my-gateway
  namespace: default
spec:
  gatewayClassName: my-gateway-class
  listeners:  # Use GatewayClass defaults for listener definition.
    - protocol: HTTP
      port: 80
      routes:
        kind: HTTPRoute
        namespaces:
          from: Same
        selector:
          matchLabels:
            app: foo
     - protocol: HTTPS
       port: 443
       tls:
         certificateRef:
           group: "core"
           kind: "Secret"
           name: "mysecret"
       routes:
         kind: HTTPRoute
         selector:
           matchLabels:
             app: foo
    - protocol: TCP
      port: 9000
      routes:
        kind: TCPRoute
        namespaces:
          from: Same
        selector:
          matchLabels:
            app: footcp
    - protocol: TLS
      port: 9443
      hostname: example.com
      tls:
        certificateRef:
          group: "core"
          kind: "Secret"
          name: "mysecret"
      routes:
        kind: TLSRoute
        namespaces:
          from: Same
        selector:
          matchLabels:
            app: footls

---
kind: HTTPRoute
apiVersion: networking.x-k8s.io/v1alpha1
metadata:
  name: http-app-1
  namespace: default
  labels:
    app: foo
spec:
  hostnames:
    - "foo.com"
  rules:
    - matches:
        - path:
            type: Exact
            value: /bar
      forwardTo:
        - serviceName: whoami
          port: 80
          weight: 1
    - matches:
        - path:
            type: Prefix
            value: /foo
      forwardTo:
        - backendRef:
            group: traefik.containo.us
            kind: TraefikService
            name: myservice@file
          weight: 1
          port: 80

---
kind: TCPRoute
apiVersion: networking.x-k8s.io/v1alpha1
metadata:
  name: tcp-app-1
  namespace: default
  labels:
    app: footcp
spec:
  rules:
     - forwardTo:
        - serviceName: whoamitcp
          port: 9000
          weight: 1

---
kind: TLSRoute
apiVersion: networking.x-k8s.io/v1alpha1
metadata:
  name: tls-app-1
  namespace: default
  labels:
    app: footls
spec:
  rules:
    - forwardTo:
        - serviceName: whoamitcp
          port: 9000
          weight: 1
