我跑istio了Kubernetes.我想知道特使边车是如何工作的.例如,在将边车注入吊舱后,原始集装箱无法进入外部网络EgressRule.它是如何工作的?
如上所述这里,Knative的激活接收和缓冲的要求不活跃修订。
这个路由是如何实现的?我在应用程序的命名空间中看到的只是一个 VirtualService 路由对修订版的请求,所以我看不到进入网格的流量是如何重定向到 Activator 的。
Knative 服务版本:0.9.0
我有一个 GRPC Web 客户端和一个 GRPC 服务器,我正在使用从 HTTP 1.1 到 HTTP2 的转换的特使代理。
我的服务器创建逻辑使用 TLS。代码如下:
var opts []grpc.ServerOption
creds, err := credentials.NewServerTLSFromFile("cert/server.crt", "cert/server.key")
if err != nil {
log.Fatalf("Failed to generate credentials %v", err)
}
opts = []grpc.ServerOption{grpc.Creds(creds)}
server := grpc.NewServer(opts...)
Run Code Online (Sandbox Code Playgroud)
我正在从我的反应客户端调用如下:
const client = new LiveClient('http://localhost:8080')
const request = new GetLiveRequest()
request.setApi(1)
request.setTrackkey(trackKey)
// on success response
const stream = client.getLive(request, {})
stream.on('data', response => {
console.log(response);
}
Run Code Online (Sandbox Code Playgroud)
envoy.yaml 如下:
admin:
access_log_path: /tmp/admin_access.log
address:
socket_address: { address: 0.0.0.0, port_value: 9901 } …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 http2/grpc 流媒体,但我的连接在 15 秒内中断。关于超时设置的文档说将超时设置为 0。但是,当我这样做时,Envoy 在启动时抛出错误,抱怨 0 不是 Duration 类型的有效值。
如何禁用路由超时?
这是我的 Envoy 配置 .yml
admin:
access_log_path: "/dev/null"
address:
socket_address:
address: 0.0.0.0
port_value: 8801
static_resources:
listeners:
- address:
socket_address:
address: 0.0.0.0
port_value: 11001
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
http_filters:
- name: envoy.filters.http.router
route_config:
name: grpc_route
virtual_hosts:
- name: grpc_service
domains: ["*"]
routes:
- name: grpc_proxy
match:
prefix: "/"
route:
timeout: 0 # How do I disable the …Run Code Online (Sandbox Code Playgroud) 我正在发送带有以下标头的 http 请求。
标头 = {"InstanceId" : "1"}
如何使用此标头值(即 1)路由到集群(端点)
我实际上想在 envoy.yaml 中做什么:
if (头.InstanceId == 1)
Route to cluster A
Run Code Online (Sandbox Code Playgroud)
Else If (标头.InstanceId == 2)
Route to cluster B
Run Code Online (Sandbox Code Playgroud)
有人可以帮我吗?提前致谢。
我已经使用kubespray设置了kubernetes集群,现在我正在尝试遵循本指南
root@node1 ~ # kubectl get -n heptio-contour service contour -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
contour LoadBalancer 10.233.55.94 <pending> 80:32414/TCP,443:30149/TCP 42m app=contour
Run Code Online (Sandbox Code Playgroud)
EXTERNAL-IP由于我在裸机上(而不是AWS / GKE等),因此似乎正在等待
为了在那里显示外部IP,我需要做什么?
我试图通过查看 istio-proxy 访问日志(它记录每次访问)来对我的服务进行故障排除。但是,我找不到任何解释日志中每个条目含义的文档。
例如
[2018-12-20T11:09:42.302Z]“GET / HTTP/1.1”200-0 614 0 0“10.32.96.32”“curl/7.54.0”“17b8f245-af00-4379-9f8f-a4dcd2f38c01”“foo .com”“127.0.0.1:8080”
上面的log是什么意思?
我已经尝试过Vadim 的答案,但找不到日志格式数据。这是输出 json 文件。有什么我想念的吗?我正在使用 istio-1.0.0
我有两个 gRPC 服务,一个将通过正常的 gRPC 方法调用另一个服务(两边都没有流),我使用 istio 作为服务网格,并将 sidecar 注入到这两个服务的 kubernetes pod 中。
正常负载下gRPC调用正常,但在高并发负载情况下,gRPC客户端一直抛出以下异常:
<#bef7313d> i.g.StatusRuntimeException: UNAVAILABLE: upstream connect error or disconnect/reset before headers
at io.grpc.Status.asRuntimeException(Status.java:526)
at i.g.s.ClientCalls$StreamObserverToCallListenerAdapter.onClose(ClientCalls.java:434)
at i.g.PartialForwardingClientCallListener.onClose(PartialForwardingClientCallListener.java:39)
at i.g.ForwardingClientCallListener.onClose(ForwardingClientCallListener.java:23)
at i.g.ForwardingClientCallListener$SimpleForwardingClientCallListener.onClose(ForwardingClientCallListener.java:40)
at i.g.i.CensusStatsModule$StatsClientInterceptor$1$1.onClose(CensusStatsModule.java:678)
at i.g.PartialForwardingClientCallListener.onClose(PartialForwardingClientCallListener.java:39)
at i.g.ForwardingClientCallListener.onClose(ForwardingClientCallListener.java:23)
at i.g.ForwardingClientCallListener$SimpleForwardingClientCallListener.onClose(ForwardingClientCallListener.java:40)
at i.g.i.CensusTracingModule$TracingClientInterceptor$1$1.onClose(CensusTracingModule.java:397)
at i.g.i.ClientCallImpl.closeObserver(ClientCallImpl.java:459)
at i.g.i.ClientCallImpl.access$300(ClientCallImpl.java:63)
at i.g.i.ClientCallImpl$ClientStreamListenerImpl.close(ClientCallImpl.java:546)
at i.g.i.ClientCallImpl$ClientStreamListenerImpl.access$600(ClientCallImpl.java:467)
at i.g.i.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInContext(ClientCallImpl.java:584)
at i.g.i.ContextRunnable.run(ContextRunnable.java:37)
at i.g.i.SerializingExecutor.run(SerializingExecutor.java:123)
at j.u.c.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at j.u.c.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Run Code Online (Sandbox Code Playgroud)
同时,服务端没有异常,istio-proxy客户端Pod的容器也没有错误。但是,如果我禁用 istio sidecar 注入,以便这两个服务直接相互通信,则不会出现此类错误。
有人可以告诉我为什么以及如何解决这个问题吗?
多谢。
我正在尝试让 lua envoy 过滤器与 istio 网关一起使用,但我添加到集群中,它的工作方式就好像过滤器不存在一样。
我已经使用本指南https://istio.io/docs/setup/kubernetes/install/kubernetes/在 GKE 上配置了我的 istio 集群。
有人遇到过同样的问题吗?
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: edge-lua-filter
spec:
workloadLabels:
app: httpbin-gateway
filters:
- listenerMatch:
listenerType: GATEWAY
filterName: envoy.lua
filterType: HTTP
filterConfig:
inlineCode: |
-- Called on the request path.
function envoy_on_request(request_handle)
request_handle:headers():add("foo", "bar")
end
-- Called on the response path.
function envoy_on_response(response_handle)
body_size = response_handle:body():length()
response_handle:headers():add("response-body-size", tostring(body_size))
end
Run Code Online (Sandbox Code Playgroud)
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: httpbin-gateway
namespace: foo
spec:
selector:
istio: ingressgateway # use Istio default gateway …Run Code Online (Sandbox Code Playgroud) 我有 Envoy 代理处理 SSL 终止。Nginx(docker 容器中的 1.17.0,已编译--with-http_v2_module)是几个上游服务之一。结果,Nginx 在端口 443 上接收流量但不使用该ssl模块:
server {
listen 443;
server_name example.com www.example.com;
root /var/www/html;
...
Run Code Online (Sandbox Code Playgroud)
这工作正常,但如果我尝试添加http2到监听行的末尾,我会收到:
curl: (1) Received HTTP/0.9 when not allowed
Run Code Online (Sandbox Code Playgroud)
...不仅仅是有问题的example.com,而是所有服务器。
出于明显的性能原因,我希望 Envoy 通过 HTTP/2 与 Nginx 对话。
是否有一些技巧可以让 nginx 在端口 443 上使用 http2 而无需 SSL 终止?
编辑:
核心nginx.conf:
user nginx;
worker_processes 2;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
client_max_body_size 64M;
sendfile on;
keepalive_timeout 65; …Run Code Online (Sandbox Code Playgroud) envoyproxy ×10
istio ×5
kubernetes ×4
grpc ×3
http2 ×2
grpc-java ×1
grpc-node ×1
grpc-web ×1
http-headers ×1
java ×1
knative ×1
networking ×1
nginx ×1
routes ×1
ssl ×1