kubernetes - Kubernetes 从 pod 获取入口 tls.hosts
问题描述
使用 Kubernetes 是否有办法从其他 pod 获取ingress.spec.tls.hosts
价值而不使用kubectl
(DNS, ENVVAR, OTHER)?
我知道我可以做到:
# in other pod
dig +short my-app.default.svc.cluster.local
172.20.203.19
echo $MY_APP_SERVICE_HOST
172.20.203.19
echo $MY_APP_SERVICE_PORT
3000
或者:
# in other pod
dig +short SRV my-app.default.svc.cluster.local
0 100 3000 my-app.default.svc.cluster.local.
但我实际上想连接到外部负载均衡器,my-app
其入口定义为:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-app-ingress
annotations:
kubernetes.io/ingress.class: "traefik"
kubernetes.io/tls-acme: "true"
spec:
tls:
- hosts:
- myapp.mydomain.com
rules:
- host: myapp.mydomain.com
http:
paths:
- path: /
backend:
serviceName: my-app
servicePort: http
所以,我想动态地myapp.mydomain.com
从 pod 中获取。
解决方案
使用 kubernetes api 获取入口资源。创建一个角色,将其与服务帐户相关联,然后使用 curl 列出您的入口。下面是默认命名空间和服务帐户的示例:
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: ingress-clusterrole
namespace: default
rules:
- apiGroups: ["*"] # "" indicates the core API group
resources: ["ingresses"]
verbs: ["*"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: ingress-clusterrolebinding
namespace: default
roleRef:
name: ingress-clusterrole
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
subjects:
- name: default
namespace: default
kind: ServiceAccount
curl --cacert /var/run/secrets/kubernetes.io/serviceaccount/ca.crt -H "Authorization: Bearer $(cat /var/run/secrets/kubernet
es.io/serviceaccount/token)" -H "Accept: application/json" -H "Content-Type: application/json" https://kubernetes.default.svc/ap
is/extensions/v1beta1/namespaces/default/ingresses | jq '.items'
推荐阅读
- php - PHP从循环中保存增量变量
- ios - 请求访问照片库提示停留在后台
- visual-studio - 使用 vsperfmon 获取在 IIS 中运行的 REST 服务的代码覆盖率
- mysql - SELECT JOIN 与条件 (OR) 交叉
- r - 对行中的单元格进行排序以匹配 R 中的相应列标题
- javascript - 有一种方法可以在 v3 中重新获取 fullcalendar 吗?
- asp.net-core - 异常时 Serilog 更改日志级别
- php - Symfony4 上的 Gandi + SwiftMailer
- xml - 存在 xmlns 属性时如何使用 XSLT?
- c - 在 mac os x 上是否有 clang 识别的常量?