我已经在我注册的域上使用Traefik Ingress Controller和AWS HTTPS负载平衡器成功公开了AWS上的两个微服务。
以下是源代码:https://github.com/skyglass-examples/user-management-keycloak
我可以通过https url轻松访问两个微服务:
https://users.skycomposer.net/usermgmt/swagger-ui/index.html
https://users.skycomposer.net/whoami
因此,看来Traefik入口控制器和AWS HTTPS负载均衡器配置正确。
不幸的是,Keyclope服务器在这种环境下无法工作。当我尝试通过https url访问它时:
https://users.skycomposer.net/keycloak
我收到以下回复:
404 page not found
我的配置中是否遗漏了什么?
以下是我使用的一些Keyclope kubernetes清单:
keycloak-config.yaml:
apiVersion: v1
kind: ConfigMap
metadata:
name: keycloak
data:
KEYCLOAK_USER: admin@keycloak
KEYCLOAK_MGMT_USER: mgmt@keycloak
JAVA_OPTS_APPEND: '-Djboss.bind.address.management=0.0.0.0'
PROXY_ADDRESS_FORWARDING: 'true'
KEYCLOAK_LOGLEVEL: INFO
ROOT_LOGLEVEL: INFO
DB_VENDOR: H2
Keyclope部署。yaml:
kind: Deployment
apiVersion: apps/v1
metadata:
name: keycloak
labels:
app: keycloak
spec:
replicas: 1
selector:
matchLabels:
app: keycloak
template:
metadata:
labels:
app: keycloak
spec:
containers:
- name: keycloak
image: jboss/keycloak:12.0.4
imagePullPolicy: Always
ports:
- containerPort: 9990
hostPort: 9990
volumeMounts:
- name: keycloak-data
mountPath: /opt/jboss/keycloak/standalone/data
env:
- name: KEYCLOAK_USER
valueFrom:
configMapKeyRef:
name: keycloak
key: KEYCLOAK_USER
- name: KEYCLOAK_MGMT_USER
valueFrom:
configMapKeyRef:
name: keycloak
key: KEYCLOAK_MGMT_USER
- name: JAVA_OPTS_APPEND
valueFrom:
configMapKeyRef:
name: keycloak
key: JAVA_OPTS_APPEND
- name: DB_VENDOR
valueFrom:
configMapKeyRef:
name: keycloak
key: DB_VENDOR
- name: PROXY_ADDRESS_FORWARDING
valueFrom:
configMapKeyRef:
name: keycloak
key: PROXY_ADDRESS_FORWARDING
- name: KEYCLOAK_LOGLEVEL
valueFrom:
configMapKeyRef:
name: keycloak
key: KEYCLOAK_LOGLEVEL
- name: ROOT_LOGLEVEL
valueFrom:
configMapKeyRef:
name: keycloak
key: ROOT_LOGLEVEL
- name: KEYCLOAK_PASSWORD
valueFrom:
secretKeyRef:
name: keycloak
key: KEYCLOAK_PASSWORD
- name: KEYCLOAK_MGMT_PASSWORD
valueFrom:
secretKeyRef:
name: keycloak
key: KEYCLOAK_MGMT_PASSWORD
volumes:
- name: keycloak-data
persistentVolumeClaim:
claimName: keycloak-pvc
Keyclope服务。yaml:
apiVersion: v1
kind: Service
metadata:
name: keycloak
spec:
ports:
- protocol: TCP
name: web
port: 80
targetPort: 9990
selector:
app: keycloak
traefik入口。yaml:
apiVersion: networking.k8s.io/v1beta1
kind: IngressClass
metadata:
name: traefik-lb
spec:
controller: traefik.io/ingress-controller
---
apiVersion: "networking.k8s.io/v1beta1"
kind: "Ingress"
metadata:
name: "traefik-usermgmt-ingress"
spec:
ingressClassName: "traefik-lb"
rules:
- host: "keycloak.skycomposer.net"
http:
paths:
- path: "/usermgmt"
backend:
serviceName: "usermgmt"
servicePort: 80
---
apiVersion: "networking.k8s.io/v1beta1"
kind: "Ingress"
metadata:
name: "traefik-whoami-ingress"
spec:
ingressClassName: "traefik-lb"
rules:
- host: "keycloak.skycomposer.net"
http:
paths:
- path: "/whoami"
backend:
serviceName: "whoami"
servicePort: 80
---
apiVersion: "networking.k8s.io/v1beta1"
kind: "Ingress"
metadata:
name: "traefik-keycloak-ingress"
spec:
ingressClassName: "traefik-lb"
rules:
- host: "keycloak.skycomposer.net"
http:
paths:
- path: "/keycloak"
backend:
serviceName: "keycloak"
servicePort: 80
在我的github上查看所有其他文件:https://github.com/skyglass-examples/user-management-keycloak
我还检查了在我的K3S库伯内特斯集群上运行的密钥斗篷吊舱的日志:
20:57:34,147 INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: Keycloak 12.0.4 (WildFly Core 13.0.3.Final) started in 43054ms - Started 687 of 972 services (687 services are lazy, passive or on-demand)
20:57:34,153 INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0060: Http management interface listening on http://127.0.0.1:9990/management
20:57:34,153 INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0051: Admin console listening on http://127.0.0.1:9990
一切似乎都很好,管理控制台正在监听http://127.0.0.1:9990
我还尝试在部署和服务清单中使用9990目标端口,而不是8080,但结果仍然相同。
右-管理控制台正在监听127.0.0.1。这不是外部世界的接口。这是“localhost”。
您在这里有两个选择。您可以使用命令行参数启动Keycloak,例如:
bin/standalone.sh -Djboss.bind.address.management=0.0.0.0
这将在端口9990上启动管理控制台,但在0.0.0.0
接口上,也就是说所有接口。因此,您仍然可以在localhost上连接到它,但它现在将监听其他(即以太网)接口。
另一个选项是修改独立/配置/独立。xml文件和更改:
<interfaces>
<interface name="management">
<inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
</interface>
<interface name="public">
<inet-address value="${jboss.bind.address:127.0.0.1}"/>
</interface>
</interfaces>
仅仅是:
<interfaces>
<interface name="management">
<inet-address value="0.0.0.0"/>
</interface>
<interface name="public">
<inet-address value="${jboss.bind.address:127.0.0.1}"/>
</interface>
</interfaces>
或者任何你想让Keyclope监听的地址。当然,如果你愿意,你也可以更改公共广播。
请注意,端口的控制方式不同。控制这种情况的标准方法是使用以下内容运行:
bin/standalone.sh -Djboss.socket.binding.port-offset=1000
在此示例中,所有端口都添加了1000个。因此,管理端口从9990增加到10990,因为基础中添加了1000个。
作为一般声明,我通常会在我所有的Wildfly服务器前放置一个代理(AJP或HTTP)。这样这些都不重要,您的代理连接到例如127.0.0.1
,端口9990
。但是,当然,这取决于您。
终于解决了这个问题。
在traefik后面运行Keyclope需要以下配置:
PROXY_ADDRESS_FORWARDING=true
KEYCLOAK_HOSTNAME=${YOUR_KEYCLOAK_HOSTNAME}
此外,我必须使用根路径“/”作为入口规则:
apiVersion: "networking.k8s.io/v1beta1"
kind: "Ingress"
metadata:
name: "traefik-keycloak-ingress"
spec:
ingressClassName: "traefik-lb"
rules:
- host: "keycloak.skycomposer.net"
http:
paths:
- path: "/"
backend:
serviceName: "keycloak"
servicePort: 80
在这里,您可以找到其他可能有用的配置属性:https://github.com/Artiume/docker/blob/master/traefik-SSO.yml
信不信由你,这是互联网上唯一的资源,它提到了keydave\u主机名来解决我的问题。通过关键字“Keyclope traefik 404”搜索两天,没有结果!
你可以在我的github:https://github.com/skyglass-examples/user-management-keycloak上找到完整的固定代码,配置正确
我找到了一个小的解决方法,但不幸的是,这对我来说不是最好的解决方案。
我转发了端口:
kubectl port-forward --address 0.0.0.0 service/keycloak 32080:http
现在,Keyclope服务器在以下位置可用:
http://localhost:32080/auth/
但是如何通过这个网址让它在外部可用呢?
https://keycloak.skycomposer.net/keycloak/auth
以我目前的配置,我仍然不清楚为什么从外面看不到密钥斗篷。
目标:将弹性/静态IP分配给负载平衡器(LB),以服务于处理DNS(端口53)、HTTPS(端口443)、HTTP(端口80)的EC2实例。 需要静态IP来正确配置DNS记录(即A记录)。需要在后端/服务器上终止TLS,以提供无限制的 经典的负载平衡器允许自定义安全规则,并允许在EC2实例上终止SSL。问题是静态IP不能分配给经典LB,只能分配给其中的单个实例,这无法平衡负载。 要分配静态IP,我
我们在AWS EKS kubernetes集群中运行了一个Hazelcast 3.12集群。 您知道如何将运行在AWS EKS kubernetes群集内部的具有多个pod的Hazelcast群集暴露到kubernetes群集外部吗? Hazelcast集群有6个吊舱,暴露在kubernetes集群之外,具有LoadBalancer(AWS经典负载平衡器)类型的kubernetes“服务”。 当我
nginx入口控制器: 这就是入口资源:
试图自学如何使用库伯内特斯,但有一些问题。 我的下一步是尝试使用LoadBalancer类型的服务来访问nginx。 我建立了一个新的集群并部署了nginx映像。 然后,我为LoadBalancer设置服务 设置完成后,我尝试使用LoadBalancer入口(我在描述LoadBalancer服务时发现)访问nginx。我收到一个此页面无法工作的错误。 不太确定我哪里出错了。 kubectl获得sv
我配置了Google Cloud load balancer和无服务器NEG来让我的app engine在静态IP中工作,但它无论如何都不起作用。下面是我用于配置的命令。 请帮我拿这个。 提前感谢!
这意味着Zookeeper将负载均衡器理解为一个客户机,并与之建立联系。但是负载均衡器只是ping TCP2181就出来了。