Open cnych opened 5 years ago
有一个疑问,认证的secret对象是长什么样子呢,没有istio,打算直接使用k8s创建时候的ca证书作为凭证,那么这个挂载secret是长什么样子呢。看官方文档说可以用其他方式进行认证,但是文档看得特别迷,没有见到过实体的demo,只有一个模糊的讲解。
你好, 文中的https://github.com/cnych/admission-webhook-example这demo怎么在golang中运行呢,依赖加载不通过
@xiongmaodada 这个里面现在是用的 dep 做依赖管理,更新依赖的时候里面有很多 kubernetes 的包,所以比较慢,而且很可能需要挂代理才可以~
CA 证书应提供给 admission webhook 配置,这样 apiserver 才可以信任 webhook server 提供的 TLS 证书。因为我们上面已经使用 Kubernetes API 签署了证书,所以我们可以使用我们的 kubeconfig 中的 CA 证书来简化操作。
这句话有点看不懂,假设拿平常的浏览器-服务器来看待的话,apiServer作为客户端,apiServer通过TLS请求webhook server,那么apiServer应该会得到webhook server返回的CA证书是吧?所以apiServer需要有一个CA根证书(浏览器操作系统都是预先内置的CA根证书,所以不需要我们去配置)去验证得到的这个证书的真实性和有效性,所以这里的CA_BUNDLE
就类似于CA根证书是吗?为了验证webhook server证书的有效性的?
而我们kubeconfig中的CA证书其实也是k8s API签署的,所以同样可以作为apiserver请求webhook server时的CA根证书是这个意思吗?
创建 sleep.yaml 拦不住,
webhook deployment 的 pod 会报这个错误:
2019/10/25 09:33:01 http: TLS handshake error from 10.244.0.0:10131: remote error: tls: bad certificate
@silenceli 创建 sleep.yaml 拦不住,
webhook deployment 的 pod 会报这个错误:
2019/10/25 09:33:01 http: TLS handshake error from 10.244.0.0:10131: remote error: tls: bad certificate
这种就是 caBundle 的问题了
这个博客模版不错,想知道下模版链接?
@Ghostwritten 嗯,这个证书生成脚本在新版本中好像有问题,现在我是直接用 openssl 或者 cfssl 工具生成的,这样也可以,可以参考最新的博客文章哈~
问题:http: TLS handshake error from 10.244.0.0:10131: remote error: tls: bad certificate caBundle 的问题 ,
cat ./deployment/validatingwebhook.yaml | ./deployment/webhook-patch-ca-bundle.sh > ./deployment/validatingwebhook-ca-bundle.yaml
查看生成 ./deployment/validatingwebhook-ca-bundle.yaml
和 ./deployment/mutatingwebhook-ca-bundle.yaml
替换的 ${CA_BUNDLE} 为空
解决办法:webhook-patch-ca-bundle.sh 换成以下内容
#!/bin/bash
set -o errexit
set -o nounset
set -o pipefail
CA_BUNDLE=$(kubectl config view --raw --minify --flatten -o jsonpath='{.clusters[].cluster.certificate-authority-data}')
if [ -z "${CA_BUNDLE}" ]; then
CA_BUNDLE=$(kubectl get secrets -o jsonpath="{.items[?(@.metadata.annotations['kubernetes\.io/service-account\.name']=='default')].data.ca\.crt}")
fi
export CA_BUNDLE
if command -v envsubst >/dev/null 2>&1; then
envsubst
else
sed -e "s|\${CA_BUNDLE}|${CA_BUNDLE}|g"
fi
重新执行
cat ./deployment/validatingwebhook.yaml | ./deployment/webhook-patch-ca-bundle.sh > ./deployment/validatingwebhook-ca-bundle.yaml
cat ./deployment/mutatingwebhook.yaml | ./deployment/webhook-patch-ca-bundle.sh > ./deployment/mutatingwebhook-ca-bundle.yaml
你好,请问如何利用 admission webhook 来进行容器时钟time zone的配置呢?原先都是用pod presets来配置的
你好,请问如何利用 admission webhook 来进行容器时钟time zone的配置呢?原先都是用pod presets来配置的
可以拦截 pod 创建,增加时区的环境变量吧?
@addozhang 当然可以
问下,我部署了webhook之后,只能在webhook所在的namespace下,相应规则才会生效嘛,还是所有的namespace都会生效?
https://www.qikqiak.com/post/k8s-admission-webhook/
Kubernetes 提供了需要扩展其内置功能的方法,最常用的可能是自定义资源类型和自定义控制器了,除此之外,Kubernetes 还有一些其他非常有趣的功能,比如 admission webhooks 或者 initializers,这些也可以用于扩展 API,它们可以用于修改某些 Kubernetes 资源的基本行为,接下来我们来看看那些引入了 admission webhooks 的动态准入控制。