В моем kustomization.yaml
У меня есть:
configMapGenerator:
- name: nginx-config
files:
- nginx.conf
vars:
- name: PHP_FPM
objref:
kind: Service
name: app-service
apiVersion: v1
fieldref:
fieldpath: metadata.name
А потом в nginx.conf
У меня есть:
location = /index.php {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass $(PHP_FPM):9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /app/index.php;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
Когда я бегу kustomize
var не заменяется:
❯ kustomize build kubernetes/overlays/staging | grep fastcgi_pass
2020/06/07 18:25:05 well-defined vars that were never replaced: PHP_FPM
fastcgi_pass $(PHP_FPM):9000;
Как я могу ввести свое название службы в nginx.conf
?
По тому, что Nginx не поддерживает переменные в файле конфигурации, файл должен быть скорректирован, прежде чем он будет применен к контейнеру Nginx.
Kustomize
варс разрешено только в конкретные места и ConfigMap.data
на данный момент не входит в их число.
Ошибка сообщает вам, что PHP_FPM
переменная определяется в kustomization.yaml
но никогда не использовался для замены. Link1 Link2
Тем не менее, проблему можно было решить, настроив nginx.conf
контент с использованием Init Container
а затем установите его на Main container
.
kustomization.yaml:
resources:
- cm-init-pod.yaml
- svc.yaml
patches:
- patch.yaml
configMapGenerator:
- name: mymap
files:
- nginx.conf
vars:
- name: PHP_FPM
objref:
kind: Service
name: app-service
apiVersion: v1
fieldref:
fieldpath: metadata.name
cm-init-pod.yaml:
apiVersion: v1
kind: Pod
metadata:
name: cm-vol-pod
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
nginx.conf:
blalb-a
bla-bla
backend ##PHP_FPM##
bl-abla
bla-bla
svc.yaml
apiVersion: v1
kind: Service
metadata:
name: app-service
spec:
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
patch.yaml
apiVersion: v1
kind: Pod
metadata:
name: cm-vol-pod
spec:
containers:
- name: nginx
image: nginx
command: [ "bash", "-c", "nginx -g \"daemon off;\"" ]
volumeMounts:
- name: ed
# this is not a real nginx.conf so I've put it next to the original one
mountPath: /etc/nginx/nginx.conf1
subPath: nginx.conf
initContainers:
- name: init
image: nginx
command: [ "/bin/sh", "-c", "cp /mnt/cm/nginx.conf /mnt/ed/nginx.conf && sed -i 's/##PHP_FPM##/$(PHP_FPM)/' /mnt/ed/nginx.conf" ]
volumeMounts:
- name: cm
mountPath: /mnt/cm
- name: ed
mountPath: /mnt/ed
volumes:
- name: cm
configMap:
name: mymap
- name: ed
emptyDir: {}
$ kustomize build | kubectl apply -f -
# or kubectl apply -k ./
configmap/mymap-k2hbfmf776 created
service/app-service created
pod/cm-vol-pod created
$ kubectl exec -it cm-vol-pod -- bash
root@cm-vol-pod:/# cat /etc/nginx/nginx.conf1
blalb-a
bla-bla
backend app-service
bl-abla
bla-bla
$ kustomize build | kubectl delete -f -
# or
$ kubectl delete -k ./
configmap "mymap-k2hbfmf776" deleted
service "app-service" deleted
pod "cm-vol-pod" deleted