对于kc高可用方案有多种,像TCPPING,JDBC_PING,KUBE_PING,DNS_PING
等,不过目前我使用JDBC_PING实验成功了,它会把集群中节点信息存储到数据表里,然后我们在k8s里,由于我们为PING开放的是clusterIP的端口7600,所以需要配置podIP,这样,你的链路才是通的。
Kubernetes集群里有三种IP地址,分别如下:
Cluster IP是一个虚拟的IP,但更像是一个伪造的IP网络,原因有以下几点
一个service可以被部署成多个pod,为了支持更高的负载,这样做很有必要,每个pod有自己的IP地址(容器的IP),可以通过 kubectl describe pod podName -n=namespace来获取它的信息
---
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进行调研。
keycloak~使用JDBC_PING实现k8s里的高可用
原文:https://www.cnblogs.com/lori/p/15200240.html