【发布时间】:2022-10-17 20:41:55
【问题描述】:
我有一个service 正在运行并连接到一个吊舱。在 pod 中,我需要定义必须指向自身的 env 变量。如果我在本地运行,我会将path 设置为localhost:8080 并且它可以工作。如何将env 变量设置为指向服务本身?
user@user % kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-service LoadBalancer 10.96.116.26 129.153.28.245 8080:31495/TCP 21h
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP,12250/TCP 5d18h
如果配置是:
spec:
containers:
- name: myapp
image: path/to/imageregistry/image:v1.0.0-amd64
env:
- name: BASE_PATH
value: "129.153.28.245:8080"
应用程序正在运行,从某种意义上说,如果我在浏览器中打开 129.153.28.245:8080/app/pages,它将打开该网站。如果我用<CLUSTER-IP> 替换<EXTERTNAL-IP>,它不会加载。
如何从service 中检索<EXTERTNAL-IP> 并放入env 变量中,例如:
env:
- name: BASE_PATH
value: "<EXTERNAL-IP-FROM-SERVICE-NAME>:8080"
还是有另一种更好的方法来做到这一点?
这是完整的Deployment 和Service yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
selector:
matchLabels:
app: myapp
replicas: 1
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: xxx.ocir.io/xxxxxx/myrepo/myimage:v1.0.0-amd64
env:
- name: BASE_PATH
value: "129.153.28.245:8080"
ports:
- containerPort: 80
imagePullSecrets:
- name: ocirsecret
---
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: LoadBalancer
ports:
- port: 8080
protocol: TCP
targetPort: 8080
selector:
app: myapp
【问题讨论】:
-
也许,您可以使用容器命令来 kubectl 描述您的服务以获取 IP 地址并导出为 env 变量?
-
你在 Kubernetes 开源、GCP、AWS、Azure 工作吗?
-
@HectorMartinezRodriguez 没关系(oracle cloud k8s)
-
@先生。你为什么要那样做?在问题中包含您的部署目标会很有帮助,这样社区就可以为您提供最适合它的解决方案。