我在 AWS EKS 托管的 Kubernetes 集群中部署了 Istio。这创建了一个名为 istio-ingressgateway 的 LoadBalancer 类型的 Kubernetes 服务,外部主机名为[redacted]-redacted.us-west-2.elb.amazonaws.com,并自动配置了一个 AWS ELB,类型为经典。那太棒了。(注意:在 AWS 控制台中,我没有看到此 elb 主机名的托管区域,看起来我无法配置别名或诸如此类的东西)
我已经能够通过定义一个打开端口 80 的 istio 网关host:"*",并定义一个将端口 80路由到我的目的地(某些端口一些 kubernetes 服务)。到现在为止还挺好。
现在我想为集群中的第二个 gRPC 端点执行此操作。据我所知,我的选择是:要么通过在入口上打开第二个端口(比如 81)来路由(我现在选择不这样做)。或者通过定义 的子域进行[redacted]-redacted.us-west-2.elb.amazonaws.com路由,或者通过实现“虚拟主机”进行路由,即客户端host:"svc1"在标头中发送的同一域上的两个服务。
这就是我被困的地方。不知道怎么给这个ELB域名定义子域,也不知道能不能用TLS做虚拟主机,如果能,还能不能用Istio的“passthrough”tls模式,以免网关上的 TLS 终止。
1- 使用子域:当我在我的开发机器上尝试时,getent hosts svc1.[redacted]-redacted.us-west-2.elb.amazonaws.com它不映射到 IP,而如果删除svc1前缀 DNS 返回 3 个 IP(猜测 us-west-2 中的 3 个可用区)。所以我不能在没有一些工作的情况下为域添加 svc1 前缀。
我是否可以定义子域svc1以及svc2为通过部署 Istio 自动配置的经典 AWS ELB 创建的域,如果可以,如何定义?我可以通过kubectl/istioctl配置 Istio 来执行此操作,还是需要使用 AWS CLI …
amazon-web-services amazon-elb grpc istio kubernetes-ingress
NotAuthorizedException:Token is not from a supported provider of this identity pool我打电话时得到一个Amazon.CognitoIdentity.AmazonCognitoIdentityClient.GetIdAsync()
我不明白为什么,令牌是通过身份验证获得的GoogleSignInApi,并且 AWS 身份池配置为使用用于在 Android 设备上进行身份验证的相同“Google WebApp 客户端 ID”与 Google 身份验证提供程序联合。
我也尝试使用 2 种不同的方式获取 Google 令牌
.RequestIdToken()上GoogleSignInOptionsGoogleAuthUtil.GetTokenAPI两个令牌在检查时是不同的,两者看起来都是好的令牌,并且在给AmazonCognitoIdentityClient. 显然,用户在 Android 设备上已通过身份验证,该应用程序能够获取电子邮件、显示名称等...
var googleSignInOptions = new
GoogleSignInOptions.Builder(GoogleSignInOptions.DefaultSignIn)
.RequestIdToken("Google WebApp Client ID")
.RequestEmail()
.Build();
mGoogleApiClient = new GoogleApiClient.Builder(this)
.EnableAutoManage(
this, // FragmentActivity
this) // OnConnectionFailedListener
.AddApi(Auth.GOOGLE_SIGN_IN_API, gso)
.Build();
mGoogleApiClient.Connect();
var result = await Auth.GoogleSignInApi.SilentSignIn(mGoogleApiClient);
// Only need one or the …Run Code Online (Sandbox Code Playgroud) android amazon-web-services amazon-cognito google-signin aws-cognito
我已经安装了 1.13.1 和 1.12.9 版本
$brew list --versions | grep go
go 1.13.1
go@1.12 1.12.9
Run Code Online (Sandbox Code Playgroud)
但是我无法切换到 1.12,一个错误表明我只安装了 1.13.1 版本,这与之前的清单相矛盾。
$brew switch go 1.12
Error: go does not have a version "1.12" in the Cellar.
go installed versions: 1.13.1
Run Code Online (Sandbox Code Playgroud)
当我仔细查看 go 版本时(没有 grep)
$brew list --versions go
go 1.13.1
Run Code Online (Sandbox Code Playgroud)
所以我在安装 go 1.12 时一定是做错了什么,但是什么?我用过brew install go@1.12,我应该用另一种语法吗?
从外部客户端到 Kubernetes 集群内服务器的 TLS 握手失败。这是关于理解原因。
我已配置 Istio 入口网关以通过端口 15433 上收到的 TLS,并将其路由到端口 433 上的服务器。
入口网关日志显示客户端尝试 TLS 握手时的活动,但不显示服务器日志,也不显示 istio-proxy 日志。
TLS 客户端:
openssl s_client \
-connect [redacted]-[redacted].us-west-2.elb.amazonaws.com:15443 \
-servername myservice.mynamespace \
-CAfile /path/to/ca.cert \
-cert /path/to/cert.pem \
-key /path/to/cert.key <<< "Q"
Run Code Online (Sandbox Code Playgroud)
日志
CONNECTED(00000006)
140090868934296:error:140790E5:SSL routines:ssl23_write:ssl handshake failure:s23_lib.c:177:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 298 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported …Run Code Online (Sandbox Code Playgroud) 无论--jobs我要提出什么论点,我总是得到 4 个线程。
在make --jobs=1 target我可以这样开始的标准输出线看make[1]:,make[2]:,make[3]:而make[4]:当我只会想到一个单独的线程。
如果我使用make --jobs=100 target,结果相同,我得到 4 个线程而不是 100 个。
我不确定这是否相关,但我在 docker 容器中运行 make 并且 docker 有 7 个可用的本地主机内核。
>docker info
Operating System: Docker Desktop
OSType: linux
Architecture: x86_64
CPUs: 7
Run Code Online (Sandbox Code Playgroud)
在 Alpine Linux docker 容器内
>make --version
GNU Make 4.2.1
Built for x86_64-alpine-linux-musl
>grep -c ^processor /proc/cpuinfo
7
Run Code Online (Sandbox Code Playgroud)
确认容器获得 7 个内核。
有什么我可以运行的东西可以帮助我缩小为什么 make 会这样?