resources:
- "@type": type.googleapis.com/envoy.config.listener.v3.Listener
name: http_listener
address:
socket_address: { address: 0.0.0.0, port_value: 10000 }
filter_chains:
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
codec_type: AUTO
route_config:
name: ingress_generic_insecure
virtual_hosts:
- name: http_to_https
domains: ["*"]
routes:
- match: { prefix : "/.well-known/acme-challenge"}
route: { cluster: _acme_renewer }
- match: { prefix: "/" }
redirect: { https_redirect: true }
- name: video_insecure
domains: ["video.jerxie.com" , "video.local:10000"]
routes:
- match: { prefix : "/.well-known/acme-challenge"}
route: { cluster: _acme_renewer }
- match: { prefix : "/"}
route: { cluster: _nas_video }
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
- "@type": type.googleapis.com/envoy.config.listener.v3.Listener
name: https_listener
address:
socket_address: { address: 0.0.0.0, port_value: 10001 }
listener_filters:
- name: "envoy.filters.listener.tls_inspector"
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.listener.tls_inspector.v3.TlsInspector
filter_chains:
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
normalize_path: true
merge_slashes: true
upgrade_configs:
- upgrade_type: websocket
codec_type: AUTO
stream_idle_timeout: 300s
request_timeout: 300s
route_config:
virtual_hosts:
- name: home_service
domains: ["home.jerxie.com"]
routes:
- match: { prefix: "/" }
route: { cluster: "_homeassistant_service"}
# - match: { path: "/printer"}
# redirect: { path_redirect: "/printer/" }
# - match: { prefix: "/printer/webcam" }
# route: { prefix_rewrite: "/", cluster: _3d_printer_camera, idle_timeout: 0s }
# - match: { prefix: "/printer/" }
# route: { prefix_rewrite: "/", cluster: _3d_printer_console }
http_filters:
- name: envoy.filters.http.lua
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua
inline_code: |
require "/etc/envoy/filter"
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
filter_chain_match:
server_names: ["home.jerxie.com"]
transport_socket:
name: envoy.transport_sockets.tls
typed_config:
"@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
common_tls_context:
tls_certificates:
# - certificate_chain: { filename: "/etc/certs/home_domain/certificate.crt" }
# private_key: { filename: "/etc/certs/home_domain/private.key" }
- certificate_chain: { filename: "/etc/certs/downstream/home.jerxie.com/fullchain.pem" }
private_key: { filename: "/etc/certs/downstream/home.jerxie.com/privkey.pem" }
# validation_context:
# trusted_ca:
# filename: /etc/certs/ca_bundle.crt
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
codec_type: AUTO
route_config:
virtual_hosts:
- name: docker_service
domains: ["docker.jerxie.com"]
routes:
- match: { prefix: "/" }
route: { cluster: "_docker_registry", timeout: 0s}
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
filter_chain_match:
server_names: ["docker.jerxie.com", "docker.local"]
transport_socket:
name: envoy.transport_sockets.tls
typed_config:
"@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
common_tls_context:
tls_certificates:
- certificate_chain: { filename: "/etc/certs/downstream/docker.jerxie.com/fullchain.pem" }
private_key: { filename: "/etc/certs/downstream/docker.jerxie.com/privkey.pem" }
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
codec_type: AUTO
upgrade_configs:
- upgrade_type: websocket
route_config:
virtual_hosts:
- name: docker_service
domains: ["nas.jerxie.com", "nas:10001"]
routes:
- match: { prefix: "/" }
route: { cluster: "_nas_service", timeout: 0s}
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
filter_chain_match:
server_names: ["nas.jerxie.com", "nas"]
transport_socket:
name: envoy.transport_sockets.tls
typed_config:
"@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
common_tls_context:
tls_certificates:
- certificate_chain: { filename: "/etc/certs/downstream/nas.jerxie.com/fullchain.pem" }
private_key: { filename: "/etc/certs/downstream/nas.jerxie.com/privkey.pem" }
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
codec_type: AUTO
route_config:
virtual_hosts:
- name: docker_service
domains: ["video.jerxie.com"]
routes:
- match: { prefix: "/" }
route: { cluster: "_nas_video", timeout: 0s}
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
filter_chain_match:
server_names: ["video.jerxie.com"]
transport_socket:
name: envoy.transport_sockets.tls
typed_config:
"@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
common_tls_context:
tls_certificates:
- certificate_chain: { filename: "/etc/certs/downstream/video.jerxie.com/fullchain.pem" }
private_key: { filename: "/etc/certs/downstream/video.jerxie.com/privkey.pem" }
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
codec_type: AUTO
route_config:
virtual_hosts:
- name: plex_server
domains: ["plex.jerxie.com"]
routes:
- match: { prefix: "/" }
route: { cluster: "_plex_server", timeout: 0s}
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
filter_chain_match:
server_names: ["plex.jerxie.com"]
transport_socket:
name: envoy.transport_sockets.tls
typed_config:
"@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
common_tls_context:
tls_certificates:
- certificate_chain: { filename: "/etc/certs/downstream/plex.jerxie.com/fullchain.pem" }
private_key: { filename: "/etc/certs/downstream/plex.jerxie.com/privkey.pem" }
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
codec_type: AUTO
normalize_path: true
merge_slashes: true
route_config:
virtual_hosts:
- name: kubernetes_service
domains: ["kubernetes.jerxie.com"]
routes:
- match: { path: "/apiserver"}
route: { prefix_rewrite: "/" , cluster: _k8s_apiserver }
- match: { prefix: "/apiserver/" }
route: { prefix_rewrite: "/" , cluster: _k8s_apiserver }
- match: { prefix: "/" }
route: { cluster: "_k8s_router"}
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
filter_chain_match:
server_names: ["kubernetes.jerxie.com", "kubernetes.local"]
transport_socket:
name: envoy.transport_sockets.tls
typed_config:
"@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
common_tls_context:
tls_certificates:
- certificate_chain: { filename: "/etc/certs/downstream/kubernetes.jerxie.com/fullchain.pem" }
private_key: { filename: "/etc/certs/downstream/kubernetes.jerxie.com/privkey.pem" }
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
codec_type: AUTO
normalize_path: true
merge_slashes: true
route_config:
virtual_hosts:
- name: kubernetes_dashboard_service
domains: ["kubernetes.dashboard.jerxie.com"]
routes:
- match: { prefix: "/" }
route: { cluster: "_k8s_router"}
http_filters:
- name: envoy.filters.http.oauth2
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.oauth2.v3.OAuth2
config:
token_endpoint:
cluster: _auth_server
uri: auth.jerxie.com/token
timeout: 3s
authorization_endpoint: https://auth.jerxie.com/auth
redirect_uri: "%REQ(x-forwarded-proto)%://%REQ(:authority)%/callback"
redirect_path_matcher:
path:
exact: /callback
signout_path:
path:
exact: /signout
forward_bearer_token: true
credentials:
client_id: kubernetes-dashboard
token_secret:
name: token
sds_config:
path: "/etc/envoy/token-secret.yaml"
hmac_secret:
name: hmac
sds_config:
path: "/etc/envoy/hmac-secret.yaml"
# (Optional): defaults to 'user' scope if not provided
auth_scopes:
- openid
- email
# (Optional): set resource parameter for Authorization request
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
filter_chain_match:
server_names: ["kubernetes.dashboard.jerxie.com", "kubernetes.dashboard.local"]
transport_socket:
name: envoy.transport_sockets.tls
typed_config:
"@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
common_tls_context:
tls_certificates:
- certificate_chain: { filename: "/etc/certs/downstream/kubernetes.dashboard.jerxie.com/fullchain.pem" }
private_key: { filename: "/etc/certs/downstream/kubernetes.dashboard.jerxie.com/privkey.pem" }
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
codec_type: AUTO
route_config:
virtual_hosts:
- name: kubernetes_blog_service
domains: ["blog.jerxie.com"]
routes:
- match: { prefix: "/" }
route: { cluster: "_k8s_router"}
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
filter_chain_match:
server_names: ["blog.jerxie.com"]
transport_socket:
name: envoy.transport_sockets.tls
typed_config:
"@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
common_tls_context:
tls_certificates:
- certificate_chain: { filename: "/etc/certs/downstream/blog.jerxie.com/fullchain.pem" }
private_key: { filename: "/etc/certs/downstream/blog.jerxie.com/privkey.pem" }
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
codec_type: AUTO
route_config:
virtual_hosts:
- name: kubernetes_blog_service
domains: ["argocd.jerxie.com"]
routes:
- match: { prefix: "/" }
route: { cluster: "_k8s_router"}
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
filter_chain_match:
server_names: ["argocd.jerxie.com"]
transport_socket:
name: envoy.transport_sockets.tls
typed_config:
"@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
common_tls_context:
tls_certificates:
- certificate_chain: { filename: "/etc/certs/downstream/argocd.jerxie.com/fullchain.pem" }
private_key: { filename: "/etc/certs/downstream/argocd.jerxie.com/privkey.pem" }
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
codec_type: AUTO
upgrade_configs:
- upgrade_type: websocket
stream_idle_timeout: 0s
normalize_path: true
merge_slashes: true
route_config:
virtual_hosts:
- name: meet_service
domains: ["meet.jerxie.com"]
routes:
- match: { prefix: "/" }
route: { cluster: "_k8s_router"}
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
filter_chain_match:
server_names: ["meet.jerxie.com"]
transport_socket:
name: envoy.transport_sockets.tls
typed_config:
"@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
common_tls_context:
tls_certificates:
- certificate_chain: { filename: "/etc/certs/downstream/meet.jerxie.com/fullchain.pem" }
private_key: { filename: "/etc/certs/downstream/meet.jerxie.com/privkey.pem" }
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
codec_type: AUTO
route_config:
virtual_hosts:
- name: docker_service
domains: ["audio.jerxie.com", "audio.local"]
routes:
- match: { prefix: "/" }
route: { cluster: "_nas_audio"}
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
filter_chain_match:
server_names: ["audio.jerxie.com", "audio.local"]
transport_socket:
name: envoy.transport_sockets.tls
typed_config:
"@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
common_tls_context:
tls_certificates:
- certificate_chain: { filename: "/etc/certs/downstream/audio.jerxie.com/fullchain.pem" }
private_key: { filename: "/etc/certs/downstream/audio.jerxie.com/privkey.pem" }
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
codec_type: AUTO
upgrade_configs:
- upgrade_type: websocket
route_config:
virtual_hosts:
- name: code_service
domains: ["code.jerxie.com"]
routes:
- match: { prefix: "/" }
route: { cluster: "_code_server"}
http_filters:
- name: envoy.filters.http.oauth2
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.oauth2.v3.OAuth2
config:
token_endpoint:
cluster: _auth_server
uri: auth.jerxie.com/token
timeout: 3s
authorization_endpoint: https://auth.jerxie.com/auth
redirect_uri: "%REQ(x-forwarded-proto)%://%REQ(:authority)%/callback"
forward_bearer_token: true
redirect_path_matcher:
path:
exact: /callback
signout_path:
path:
exact: /signout
credentials:
client_id: code-server
token_secret:
name: token
sds_config:
path: "/etc/envoy/token-secret.yaml"
hmac_secret:
name: hmac
sds_config:
path: "/etc/envoy/hmac-secret.yaml"
# (Optional): defaults to 'user' scope if not provided
auth_scopes:
- openid
- email
# (Optional): set resource parameter for Authorization request
- name: envoy.filters.http.jwt_authn
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.jwt_authn.v3.JwtAuthentication
providers:
provider1:
remote_jwks:
http_uri:
uri: "https://auth.jerxie.com/keys"
cluster: _auth_server
timeout: 5s
cache_duration: 600s
from_headers:
- name: Authorization
value_prefix: "Bearer "
from_cookies:
- BearerToken
payload_in_metadata: jwt_payload
rules:
- match:
prefix: /
requires:
provider_name: provider1
- name: envoy.filters.http.lua
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua
inline_code: |
email = ""
function envoy_on_request(request_handle)
email = ""
local meta = request_handle:streamInfo():dynamicMetadata()
for key, value in pairs(meta:get("envoy.filters.http.jwt_authn")) do
if key == "jwt_payload" then
for k, v in pairs(value) do
if k == "email" then
request_handle:logInfo("login codeserver: " ..v)
email = v
end
end
end
end
end
function envoy_on_response(response_handle)
if email ~="" and email ~= "axieyangb@gmail.com" then
response_handle:logInfo("Got unauthorized user, return 403 for user " ..email)
response_handle:headers():add("set-cookie", "BearerToken=deleted; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT")
response_handle:headers():add("set-cookie", "OauthHMAC=deleted; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT")
response_handle:headers():add("set-cookie", "IdToken=deleted; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT")
response_handle:headers():add("set-cookie", "OauthExpires=deleted; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT")
end
email = ""
end
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
filter_chain_match:
server_names: ["code.jerxie.com"]
transport_socket:
name: envoy.transport_sockets.tls
typed_config:
"@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
common_tls_context:
tls_certificates:
- certificate_chain: { filename: "/etc/certs/downstream/code.jerxie.com/fullchain.pem" }
private_key: { filename: "/etc/certs/downstream/code.jerxie.com/privkey.pem" }
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
codec_type: AUTO
route_config:
virtual_hosts:
- name: photo_service
domains: ["photo.jerxie.com"]
routes:
- match: { prefix: "/" }
route: { cluster: "_nas_photo", timeout: 0s}
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
filter_chain_match:
server_names: ["photo.jerxie.com"]
transport_socket:
name: envoy.transport_sockets.tls
typed_config:
"@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
common_tls_context:
tls_certificates:
- certificate_chain: { filename: "/etc/certs/downstream/photo.jerxie.com/fullchain.pem" }
private_key: { filename: "/etc/certs/downstream/photo.jerxie.com/privkey.pem" }
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
codec_type: AUTO
route_config:
virtual_hosts:
- name: password_service
domains: ["password.jerxie.com"]
routes:
- match: { prefix: "/" }
route: { cluster: "_bitwarden_service"}
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
filter_chain_match:
server_names: ["password.jerxie.com"]
transport_socket:
name: envoy.transport_sockets.tls
typed_config:
"@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
common_tls_context:
tls_certificates:
- certificate_chain: { filename: "/etc/certs/downstream/password.jerxie.com/fullchain.pem" }
private_key: { filename: "/etc/certs/downstream/password.jerxie.com/privkey.pem" }
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
codec_type: AUTO
route_config:
virtual_hosts:
- name: gitbucket_service
domains: ["gitbucket.jerxie.com"]
routes:
- match: { prefix: "/" }
route: { cluster: "_git_bucket"}
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
filter_chain_match:
server_names: ["gitbucket.jerxie.com"]
transport_socket:
name: envoy.transport_sockets.tls
typed_config:
"@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
common_tls_context:
tls_certificates:
- certificate_chain: { filename: "/etc/certs/downstream/gitbucket.jerxie.com/fullchain.pem" }
private_key: { filename: "/etc/certs/downstream/gitbucket.jerxie.com/privkey.pem" }
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
codec_type: AUTO
upgrade_configs:
- upgrade_type: websocket
stream_idle_timeout: 0s
normalize_path: true
merge_slashes: true
route_config:
virtual_hosts:
- name: printer_service
domains: ["printer.jerxie.com"]
routes:
- match: { prefix: "/webcam" }
route: { prefix_rewrite: "/", cluster: "_3d_printer_camera", max_stream_duration: {grpc_timeout_header_max: 0s} }
- match: { prefix: "/" }
route: { cluster: "_3d_printer_console"}
http_filters:
- name: envoy.filters.http.oauth2
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.oauth2.v3.OAuth2
config:
token_endpoint:
cluster: _auth_server
uri: auth.jerxie.com/token
timeout: 3s
authorization_endpoint: https://auth.jerxie.com/auth
redirect_uri: "%REQ(x-forwarded-proto)%://%REQ(:authority)%/callback"
redirect_path_matcher:
path:
exact: /callback
signout_path:
path:
exact: /signout
forward_bearer_token: true
credentials:
client_id: octoprint-portal
token_secret:
name: token
sds_config:
path: "/etc/envoy/token-secret.yaml"
hmac_secret:
name: hmac
sds_config:
path: "/etc/envoy/hmac-secret.yaml"
# (Optional): defaults to 'user' scope if not provided
auth_scopes:
- openid
- email
# (Optional): set resource parameter for Authorization request
- name: envoy.filters.http.jwt_authn
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.jwt_authn.v3.JwtAuthentication
providers:
provider1:
remote_jwks:
http_uri:
uri: "https://auth.jerxie.com/keys"
cluster: _auth_server
timeout: 5s
cache_duration: 600s
from_headers:
- name: Authorization
value_prefix: "Bearer "
# from_cookies:
# - BearerToken
payload_in_metadata: jwt_payload
rules:
- match:
prefix: /
requires:
provider_name: provider1
- name: envoy.filters.http.lua
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua
inline_code: |
email = ""
function envoy_on_request(request_handle)
email = ""
local meta = request_handle:streamInfo():dynamicMetadata()
for key, value in pairs(meta:get("envoy.filters.http.jwt_authn")) do
if key == "jwt_payload" then
for k, v in pairs(value) do
if k == "email" then
print("login octoprint: "..v)
email = v
request_handle:headers():add("ENVOY_AUTHENTICATED_USER", v)
end
end
end
end
end
function envoy_on_response(response_handle)
if email ~="" and email ~= "axieyangb@gmail.com" then
response_handle:logInfo("Got unauthorized user, return 403 for user " ..email)
response_handle:headers():add("set-cookie", "BearerToken=deleted; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT")
response_handle:headers():add("set-cookie", "OauthHMAC=deleted; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT")
response_handle:headers():add("set-cookie", "IdToken=deleted; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT")
response_handle:headers():add("set-cookie", "OauthExpires=deleted; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT")
end
email = ""
end
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
filter_chain_match:
server_names: ["printer.jerxie.com", "printer.local"]
transport_socket:
name: envoy.transport_sockets.tls
typed_config:
"@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
common_tls_context:
tls_certificates:
- certificate_chain: { filename: "/etc/certs/downstream/printer.jerxie.com/fullchain.pem" }
private_key: { filename: "/etc/certs/downstream/printer.jerxie.com/privkey.pem" }
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
codec_type: AUTO
upgrade_configs:
- upgrade_type: websocket
route_config:
virtual_hosts:
- name: camera_service
domains: ["camera.jerxie.com"]
routes:
- match: { prefix: "/" }
route: { cluster: "_nas_camera"}
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
filter_chain_match:
server_names: ["camera.jerxie.com"]
transport_socket:
name: envoy.transport_sockets.tls
typed_config:
"@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
common_tls_context:
tls_certificates:
- certificate_chain: { filename: "/etc/certs/downstream/camera.jerxie.com/fullchain.pem" }
private_key: { filename: "/etc/certs/downstream/camera.jerxie.com/privkey.pem" }
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
codec_type: AUTO
route_config:
virtual_hosts:
- name: note_service
domains: ["note.jerxie.com"]
routes:
- match: { prefix: "/" }
route: { cluster: "_nas_note"}
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
filter_chain_match:
server_names: ["note.jerxie.com"]
transport_socket:
name: envoy.transport_sockets.tls
typed_config:
"@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
common_tls_context:
tls_certificates:
- certificate_chain: { filename: "/etc/certs/downstream/note.jerxie.com/fullchain.pem" }
private_key: { filename: "/etc/certs/downstream/note.jerxie.com/privkey.pem" }
# - filters:
# - name: envoy.filters.network.http_connection_manager
# typed_config:
# "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
# stat_prefix: ingress_http
# codec_type: AUTO
# route_config:
# virtual_hosts:
# - name: baby_service
# domains: ["baby.jerxie.com"]
# routes:
# - match: { prefix: "/" }
# route: { cluster: "_baby_buddy"}
# http_filters:
# - name: envoy.filters.http.router
# typed_config:
# "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
# filter_chain_match:
# server_names: ["baby.jerxie.com"]
# transport_socket:
# name: envoy.transport_sockets.tls
# typed_config:
# "@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
# common_tls_context:
# tls_certificates:
# - certificate_chain: { filename: "/etc/certs/downstream/baby.jerxie.com/fullchain.pem" }
# private_key: { filename: "/etc/certs/downstream/baby.jerxie.com/privkey.pem" }
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
upgrade_configs:
- upgrade_type: websocket
codec_type: AUTO
route_config:
virtual_hosts:
- name: container_service
domains: ["container.jerxie.com"]
routes:
- match: { prefix: "/" }
route: { cluster: "_portainer_ui"}
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
filter_chain_match:
server_names: ["container.jerxie.com"]
transport_socket:
name: envoy.transport_sockets.tls
typed_config:
"@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
common_tls_context:
tls_certificates:
- certificate_chain: { filename: "/etc/certs/downstream/container.jerxie.com/fullchain.pem" }
private_key: { filename: "/etc/certs/downstream/container.jerxie.com/privkey.pem" }
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
upgrade_configs:
- upgrade_type: websocket
codec_type: AUTO
route_config:
virtual_hosts:
- name: grafana_service
domains: ["grafana.jerxie.com"]
routes:
- match: { prefix: "/" }
route: { cluster: "_grafana_ui"}
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
filter_chain_match:
server_names: ["grafana.jerxie.com"]
transport_socket:
name: envoy.transport_sockets.tls
typed_config:
"@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
common_tls_context:
tls_certificates:
- certificate_chain: { filename: "/etc/certs/downstream/grafana.jerxie.com/fullchain.pem" }
private_key: { filename: "/etc/certs/downstream/grafana.jerxie.com/privkey.pem" }
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
upgrade_configs:
- upgrade_type: websocket
codec_type: AUTO
route_config:
virtual_hosts:
- name: auth_service
domains: ["auth.jerxie.com"]
routes:
- match: { prefix: "/" }
route: { cluster: "_auth_server"}
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
filter_chain_match:
server_names: ["auth.jerxie.com"]
transport_socket:
name: envoy.transport_sockets.tls
typed_config:
"@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
common_tls_context:
tls_certificates:
- certificate_chain: { filename: "/etc/certs/downstream/auth.jerxie.com/fullchain.pem" }
private_key: { filename: "/etc/certs/downstream/auth.jerxie.com/privkey.pem" }
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
upgrade_configs:
- upgrade_type: websocket
codec_type: AUTO
route_config:
virtual_hosts:
- name: ai_service
domains: ["ai.jerxie.com"]
routes:
- match: { prefix: "/api" }
route: { cluster: "_ai_api_server", timeout: 0s}
- match: { prefix: "/" }
route: { cluster: "_ai_ui_server", timeout: 0s}
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
filter_chain_match:
server_names: ["ai.jerxie.com"]
transport_socket:
name: envoy.transport_sockets.tls
typed_config:
"@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
common_tls_context:
tls_certificates:
- certificate_chain: { filename: "/etc/certs/downstream/ai.jerxie.com/fullchain.pem" }
private_key: { filename: "/etc/certs/downstream/ai.jerxie.com/privkey.pem" }
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
upgrade_configs:
- upgrade_type: websocket
codec_type: AUTO
route_config:
virtual_hosts:
- name: pcb_service
domains: ["pcb.jerxie.com"]
routes:
- match: { prefix: "/" }
route: { cluster: "_pcb_server", timeout: 0s}
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
filter_chain_match:
server_names: ["pcb.jerxie.com"]
transport_socket:
name: envoy.transport_sockets.tls
typed_config:
"@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
common_tls_context:
tls_certificates:
- certificate_chain: { filename: "/etc/certs/downstream/pcb.jerxie.com/fullchain.pem" }
private_key: { filename: "/etc/certs/downstream/pcb.jerxie.com/privkey.pem" }
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
upgrade_configs:
- upgrade_type: websocket
codec_type: AUTO
route_config:
virtual_hosts:
- name: monitor_service
domains: ["monitor.jerxie.com"]
routes:
- match: { prefix: "/" }
route: { cluster: "_monitor_server", timeout: 0s}
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
filter_chain_match:
server_names: ["monitor.jerxie.com"]
transport_socket:
name: envoy.transport_sockets.tls
typed_config:
"@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
common_tls_context:
tls_certificates:
- certificate_chain: { filename: "/etc/certs/downstream/monitor.jerxie.com/fullchain.pem" }
private_key: { filename: "/etc/certs/downstream/monitor.jerxie.com/privkey.pem" }