请帮忙..。
我正在构建nginx加上入口控制器,并使用Dockerfile在ek中进行输出。
Dockerfile:
FROM amazonlinux:2
LABEL maintainer="armand@f5.com"
ENV NGINX_VERSION 23
ENV NJS_VERSION 0.5.2
ENV PKG_RELEASE 1.amzn2.ngx
ENV PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:${PATH}"
RUN mkdir -p /etc/ssl/nginx
ADD nginx-repo.crt /etc/ssl/nginx
ADD nginx-repo.key /etc/ssl/nginx
ADD qlik.crt /etc/ssl/nginx
RUN update-ca-trust extract
RUN yum -y update \
&& yum -y install sudo
RUN set -x \
&& chmod 644 /etc/ssl/nginx/* \
&& yum install -y --setopt=tsflags=nodocs wget ca-certificates bind-utils wget bind-utils vim-minimal shadow-utils \
&& groupadd --system --gid 101 nginx \
&& adduser -g nginx --system --no-create-home --home /nonexistent --shell /bin/false --uid 101 nginx \
&& usermod -s /sbin/nologin nginx \
&& usermod -L nginx \
&& wget -P /etc/yum.repos.d https://cs.nginx.com/static/files/nginx-plus-amazon2.repo \
&& yum --showduplicates list nginx-plus \
&& yum install -y --setopt=tsflags=nodocs nginx-plus-${NGINX_VERSION}-${PKG_RELEASE} \
&& rm /etc/nginx/conf.d/default.conf \
&& mkdir -p /var/cache/nginx \
&& mkdir -p /var/lib/nginx/state \
&& chown -R nginx:nginx /etc/nginx \
&& ln -sf /dev/stdout /var/log/nginx/access.log \
&& ln -sf /dev/stderr /var/log/nginx/error.log \
&& ulimit -c -m -s -t unlimited \
&& yum clean all \
&& rm -rf /var/cache/yum \
&& rm -rf /etc/yum.repos.d/* \
&& rm /etc/ssl/nginx/nginx-repo.crt /etc/ssl/nginx/nginx-repo.key
RUN echo "root:root" | chpasswd
EXPOSE 80 443 8080
STOPSIGNAL SIGTERM
CMD ["nginx", "-g", "daemon off;"]我使用helm命令启动容器。
helm upgrade \
--install my-athlon-ingress-controller nginx-stable/nginx-ingress --version 0.11.3 --debug \
--set controller.image.pullPolicy=Always \
--set controller.image.tag=6.0.1 \
--set controller.image.repository=957123096554.dkr.ecr.eu-central-1.amazonaws.com/nginx-service \
--set controller.nginxplus=true \
--set controller.enableSnippets=true \
--set controller.enablePreviewPolicies=true \
--set-string controller.service.annotations.'service\.beta\.kubernetes\.io/aws-load-balancer-type'='nlb' \
--set-string controller.service.annotations.'service\.beta\.kubernetes\.io/aws-load-balancer-backend-protocol'='tcp' \
--set-string controller.service.annotations.'service\.beta\.kubernetes\.io/aws-load-balancer-proxy-protocol'='*' \
--set-string controller.service.annotations.'service\.beta\.kubernetes\.io/aws-load-balancer-ssl-ports'='443'
echo Setting up SSL
export tlskey=$(aws secretsmanager get-secret-value --secret-id myathlon/infrastructure/$(env)/gate-key |jq --raw-output '.SecretString' )
echo $tlskey
export tlscrt=$(aws secretsmanager get-secret-value --secret-id myathlon/infrastructure/$(env)/gate-crt |jq --raw-output '.SecretString' )
echo $tlscrt
helm upgrade --install nginx-certificate-secrets ./helm-chart-nginx-certificates --set tlscrt=$tlscrt --set tlskey=$tlskey好的,让我说得更清楚一点,我在debian 10中运行了一个nginx吊舱,当我试图在keycloak中卷曲某个端点时,我会得到一个错误,例如
2022/06/13 12:17:46 info 35#35:*35461无效的JWK集当发送到客户端时,客户端: 141.113.3.32,服务器: gate-acc.athlon.com,请求:
但是,当我从一个应用程序(java )中使用相同的端点时,我会得到一个响应200。
nginx和我所有的应用程序pod都位于同一个名称空间中,并且来自EKS中的同一个集群。
我所看到的nginx和应用程序pod之间的不同之处在于,我使用了基本映像作为amazon,但是ngnix与debian的基本映像不同。
所以我怀疑操作系统是问题所在,所以现在我尝试用amazon构建一个ngnix +映像并使用helm进行部署,然后尝试缩小密钥披风端点,也就是当我找到这个路径时,
我猜想amazon可能有一些已经被信任的根证书,所以它能够卷起我的密匙斗篷,但是debian没有。
这就是我这么做的原因,在docker文件中添加一个证书是一种临时解决方案,如果这样可以的话,我可以将它作为机密添加到文件系统中。
无论是在amazon或debian中构建ngnix都是以nginx用户的身份进行的,我无法以root用户身份登录,所以我无法安装任何实用程序,如tcpdump或MRT,或者挖出查看我做curl时发生了什么,奇怪的是我甚至没有ps、sudo或任何基本命令,因为我没有根,我甚至不能安装任何东西。
错误:
错误:未能启动容器“my-athlon-ingress控制器-nginx-ingress”:来自守护进程的错误响应: OCI运行时创建失败: container_linux.go:380:启动容器进程导致: exec:"-nginx-plus=true":未在$PATH中找到可执行文件:未知
我的目标是部署此映像,并将根证书安装在amazon机器上,并对pod进行根访问。
我收到以上信息任何帮助都是非常感谢的,我还添加了ENV路径在我的码头文件。
qlik.crt有根证书
请帮忙,谢谢
发布于 2022-06-14 16:12:26
对于加载证书,您不需要构建nginx坞映像。您可以使用秘密将卷挂载加载到部署/守护进程集配置。
https://stackoverflow.com/questions/72619731
复制相似问题