keycloak~使用JDBC_PING实现k8s里的高可用
对于kc高可用方案有多种,像 TCPPING,JDBC_PING,KUBE_PING,DNS_PING
等,不过目前我使用JDBC_PING实验成功了,它会把集群中节点信息存储到数据表里,然后我们在k8s里,由于我们为PING开放的是clusterIP的端口7600,所以需要配置podIP,这样,你的链路才是通的。
集群截图
k8s三个IP地址
Kubernetes集群里有三种IP地址,分别如下:
- Node IP:Node节点的IP地址,即物理网卡的IP地址。
- Pod IP:Pod的IP地址,即docker容器的IP地址,此为虚拟IP地址。
- Cluster IP:Service的IP地址,此为虚拟IP地址。
Cluster IP
Cluster IP是一个虚拟的IP,但更像是一个伪造的IP网络,原因有以下几点
- Cluster IP仅仅作用于Kubernetes Service这个对象,并由Kubernetes管理和分配P地址
- Cluster IP无法被ping,他没有一个“实体网络对象”来响应
- Cluster IP只能结合Service Port组成一个具体的通信端口,单独的Cluster IP不具备通信的基础,并且他们属于Kubernetes集群这样一个封闭的空间。
- 在不同Service下的pod节点在集群间相互访问可以通过Cluster IP
Pod IP
一个service可以被部署成多个pod,为了支持更高的负载,这样做很有必要,每个pod有自己的IP地址(容器的IP),可以通过 kubectl describe pod podName -n=namespace来获取它的信息
相关k8s配置(非helm方式)
--- apiVersion: v1 kind: Service metadata: name: keycloak namespace: cas spec: selector: app: keycloak type: NodePort publishNotReadyAddresses: true ports: - name: http port: 8080 #clusterIP端口 protocol: TCP nodePort: 32080 #开放宿主机端口 - name: ping port: 7600 targetPort: 7600 --- apiVersion: apps/v1 kind: Deployment metadata: name: keycloak-deployment namespace: cas spec: replicas: 2 selector: matchLabels: app: keycloak template: metadata: labels: app: keycloak spec: hostAliases: #容器里host配置 - ip: "192.*.*.*" hostnames: ["ailiyun"] containers: - name: keycloak-controller image: {{IMAGE_REPOSITORY}}/{{REPOSITORY_NAMESPACE}}/keycloak/phone:{{IMAGE_TAG}} ports: - containerPort: 8080 protocol: TCP - containerPort: 7600 protocol: TCP env: - name: KEYCLOAK_USER value: admin - name: KEYCLOAK_PASSWORD value: admin - name: JGROUPS_DISCOVERY_PROTOCOL value: JDBC_PING - name: JGROUPS_DISCOVERY_EXTERNAL_IP valueFrom: fieldRef: apiVersion: v1 fieldPath: status.podIP #使用pod容器的ip地址
我们后期还会继续对dns_ping进行调研。
「其他文章」
- java~Optional语法糖
- Java~公用包中如何加载资源文件
- [email protected]一切为了可扩展性
- rsa~对接第三方rsa问题排查
- keycloak~自定义directgrant直接认证
- java~RMI引起的log4j漏洞
- k8s~Endpoints的使用之负载均衡
- keycloak~uma远程资源授权对接asp.net core
- es~存储部分字段
- maven编译后复制到目标位置
- keycloak~缓存的使用
- keycloak~授权功能的使用
- java~并行计算~大集合的并行处理
- keycloak~使用JDBC_PING实现k8s里的高可用
- keycloak~为认证提供者添加配置项
- skywalking的介绍
- springboot~disruptor异步队列
- keycloak~自定义rest接口
- springcloud~feign POST form-url-encoded data
- js~ajax获取后端HTTP状态的几种情况