在这里学习k8s + istio。我用kops
设置了2个节点+ 1个主群集。我有Istio作为入口控制器。我正在尝试为虚拟Nginx服务设置OIDC身份验证。我遇到了一个超级奇怪的错误,我不知道它来自哪里。
所以,我有一个
keycloak
服务在keycloak.example.com
上运行
nginx
服务在example.com
AWS上有一个经典ELB可以提供服务。 有Route53 DNS记录用于
ALIAS example.com dualstack.awdoijawdij.amazonaws.com
ALIAS keycloak.example.com dualstack.awdoijawdij.amazonaws.com
当我设置密钥斗篷服务时,只有该服务,我没有问题。但是,当我添加了虚拟的nginx服务时,我开始得到它。
我将使用firefox转到keycloak.example.com,并获取404。如果我进行硬刷新,则会加载页面。
然后我将转到example.com,并得到404。如果我进行硬刷新,则会加载页面。
如果我在一页上进行硬刷新,那么当我转到另一页上时,我将不得不进行硬重装或得到404。这就像某些DNS条目在每次执行时在这两种情况之间切换一样硬刷新。我不知道如何调试它。
如果我
wget -O- example.com
正如预期的那样,我有一个301 redirect
至https://example.com
wget -O- https://example.com
我的期望值是200 OK
wget -O- keycloak.example.com
正如预期的那样,我有一个301 redirect
至https://keycloak.example.com
wget -O- https://keycloak.example.com
我的期望值是200 OK
然后一切都很好。看来问题只出现在浏览器中。
我尝试以隐身模式打开页面,但问题仍然存在。
有人可以帮我调试吗?
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
ports:
- port: 80
name: http
protocol: TCP
selector:
app: nginx
---
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: nginx-gateway
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
tls:
httpsRedirect: true
hosts:
- "example.com"
- port:
number: 443
name: https
protocol: HTTPS
tls:
mode: SIMPLE
credentialName: ingress-cert
hosts:
- "example.com"
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: nginx
spec:
hosts:
- "example.com"
gateways:
- nginx-gateway
http:
- route:
- destination:
port:
number: 80
host: nginx
---
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: keycloak-gateway
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
tls:
httpsRedirect: true
hosts:
- "keycloak.example.com"
- port:
number: 443
name: https
protocol: HTTPS
tls:
mode: SIMPLE
credentialName: ingress-cert
hosts:
- "keycloak.example.com"
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: keycloak
spec:
hosts:
- "keycloak.example.com"
gateways:
- keycloak-gateway
http:
- route:
- destination:
port:
number: 80
host: keycloak-http
答案 0 :(得分:2)
问题是我为两个网关使用了相同的证书,因此导致两个服务保持相同的tcp连接。
这里https://github.com/istio/istio/issues/9429
有关于它的讨论通过对两个网关端口使用不同的证书,问题消失了