使用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
。
答案 0 :(得分:1)
使用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'
答案 1 :(得分:0)
您可能会考虑使用特定的Service Account从单独的Pod访问Kubernetes API,通过在Pod内部进行特定的令牌传播来利用Bearer token身份验证策略,根据{标识目标ServiceAccount
的凭据和权限{3}}规定授权执行;感谢@Rodrigo Loza的努力,他分享了一个很好的例子指出这一点。
但是,如果您在同一命名空间中的不同服务帐户之间区分RBAC权限,则可能会知道并为目标Pod内的相关服务帐户提供了对应的RBAC:
spec:
serviceAccountName: somename
根据官方的K8s文档:
创建Pod时,如果未指定服务帐户,则为 自动在同一帐户中分配了默认服务帐户 命名空间。如果获取已创建的Pod的原始json或yaml (例如, kubectl get pods / -o yaml ),您可以看到 spec.serviceAccountName 字段已自动设置。
我也鼓励您在K8s文档credentials中了解有关身份验证策略的更多信息。