• 【Kubernetes】访问 Service 环境变量


    环境

    1. kubernetes 1.20.2
    2. Spring Boot 2.5.0-M1

    目标

    在上一节,我们看到:k8s 已经自动把 Service 的信息放到了环境变量里。我们通过访问已有的变量来修改数据库的连接信息。

    Service 的环境变量

    查看变量

    [root@master kubernetes]# kubectl exec rc-demo-f7dcd -- printenv | grep SVC_PG
    SVC_PG_PORT_5432_TCP=tcp://10.108.222.50:5432
    SVC_PG_PORT_5432_TCP_PORT=5432
    SVC_PG_PORT=tcp://10.108.222.50:5432
    SVC_PG_PORT_5432_TCP_PROTO=tcp
    SVC_PG_SERVICE_HOST=10.108.222.50
    SVC_PG_SERVICE_PORT=5432
    SVC_PG_PORT_5432_TCP_ADDR=10.108.222.50
    

    Service 变量的命名都是以 Service 的名称大写加上下划线组成的。

    修改数据库连接

    rc.yaml

    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: rc-demo
    spec:
      replicas: 3
      template:
        metadata:
          labels:
            app: myapp
        spec:
          containers:
            - name: pod-demo
              image: jiangbo920827/spring-demo:external
              ports:
                - containerPort: 80
              env:
                - name: SERVER_PORT
                  value: "80"
                - name: SPRING_DATASOURCE_URL
                  value: jdbc:postgresql://${SVC_PG_SERVICE_HOST}:${SVC_PG_SERVICE_PORT}/postgres
    
    

    然后修改 rc,并重启 Pod。

    查看重启后状态

    [root@master kubernetes]# kubectl get pod -o wide
    NAME            READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
    rc-demo-6tcdv   1/1     Running   0          80s   10.244.2.56   node2   <none>           <none>
    rc-demo-f9xzs   1/1     Running   0          80s   10.244.2.57   node2   <none>           <none>
    rc-demo-tq4kb   1/1     Running   0          80s   10.244.2.58   node2   <none>           <none>
    

    验证

    访问接口

    [root@master kubernetes]# curl 10.244.2.58/hostname
    rc-demo-tq4kb external[root@master kubernetes]# curl 10.244.2.58/users | jq
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100    29    0    29    0     0    132      0 --:--:-- --:--:-- --:--:--   133
    [
      {
        "name": "jiangbo",
        "age": 44
      }
    ]
    

    查看环境变量

    [root@master kubernetes]# kubectl exec rc-demo-tq4kb -- printenv
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-1.8-openjdk/jre/bin:/usr/lib/jvm/java-1.8-openjdk/bin
    HOSTNAME=rc-demo-tq4kb
    SERVER_PORT=80
    SPRING_DATASOURCE_URL=jdbc:postgresql://${SVC_PG_SERVICE_HOST}:${SVC_PG_SERVICE_PORT}/postgres
    SVC_DEMO_PORT=tcp://10.106.217.209:8080
    SVC_PG_SERVICE_PORT=5432
    KUBERNETES_SERVICE_HOST=10.96.0.1
    KUBERNETES_SERVICE_PORT=443
    KUBERNETES_PORT=tcp://10.96.0.1:443
    KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
    KUBERNETES_PORT_443_TCP_PROTO=tcp
    KUBERNETES_PORT_443_TCP_PORT=443
    KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
    SVC_DEMO_PORT_8080_TCP_PROTO=tcp
    SVC_PG_PORT_5432_TCP_PORT=5432
    SVC_DEMO_PORT_8080_TCP=tcp://10.106.217.209:8080
    SVC_PG_SERVICE_HOST=10.108.222.50
    SVC_PG_PORT_5432_TCP_PROTO=tcp
    SVC_PG_PORT=tcp://10.108.222.50:5432
    SVC_PG_PORT_5432_TCP=tcp://10.108.222.50:5432
    SVC_PG_PORT_5432_TCP_ADDR=10.108.222.50
    KUBERNETES_SERVICE_PORT_HTTPS=443
    SVC_DEMO_SERVICE_HOST=10.106.217.209
    SVC_DEMO_SERVICE_PORT=8080
    SVC_DEMO_PORT_8080_TCP_PORT=8080
    SVC_DEMO_PORT_8080_TCP_ADDR=10.106.217.209
    LANG=C.UTF-8
    JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk/jre
    JAVA_VERSION=8u212
    JAVA_ALPINE_VERSION=8.212.04-r0
    HOME=/root
    

    总结

    因为 Service 自动注入了相关的信息,并且命名遵循一定的规律。所以如果我们知道任何服务的名称,就可以访问到该服务。
    这个和微服务的概念不谋而合,所以 k8s 很适合微服务,和微服务中的服务注册与发现很相似。

    附录

  • 相关阅读:
    Electio Time poj
    排列的字典序问题
    poj 2365
    编程中的命名设计那点事(转)
    编程命名中的7+1个提示(转)
    poj 1664 放苹果——递归
    再论字典序
    poj 3618
    sort用法
    poj 1088
  • 原文地址:https://www.cnblogs.com/jiangbo44/p/14352793.html
Copyright © 2020-2023  润新知