• 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进行调研。

  • 相关阅读:
    echarts 柱状图移除圆角
    echarts 图例显示到右边
    css图片文字一排
    linux磁盘分区、挂载、查看
    mysql的sql筛选排重最大值并修改其属性
    Java调用Linux下的shell命令并将结果以流的形式返回
    SHELL脚本中执行SQL语句操作MYSQL的5种方法
    在 Mac 上使用 `sed` 命令的几个坑
    Linux sed命令实现替换文本内容
    docker ps -a
  • 原文地址:https://www.cnblogs.com/lori/p/15200240.html
Copyright © 2020-2023  润新知