Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >允许变异的tls钩子使用启用tls的istio。

允许变异的tls钩子使用启用tls的istio。
EN

Stack Overflow用户
提问于 2022-06-05 04:22:31
回答 3查看 589关注 0票数 6

我有下面的MutatingWebhookConfiguration

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfiguration
metadata:
  name: example-webhook
webhooks:
  - name: example-webhook.default.svc.cluster.local
    admissionReviewVersions:
      - "v1beta1"
    sideEffects: "None"
    timeoutSeconds: 30
    objectSelector:
      matchLabels:
        example-webhook-enabled: "true"
    clientConfig:
      service:
        name: example-webhook
        namespace: default
        path: "/mutate"
      caBundle: "LS0tLS1CR..."
    rules:
      - operations: [ "CREATE" ]
        apiGroups: [""]
        apiVersions: ["v1"]
        resources: ["pods"]

我想将webhook pod注入一个启用了istio的命名空间中,istio具有严格的TLS模式。

因此,(我认为)在我的example-webhook服务中不应该需要TLS,因此它是按如下方式构建的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: v1
kind: Service
metadata:
  name: example-webhook
  namespace: default
spec:
  selector:
    app: example-webhook
  ports:
    - port: 80
      targetPort: webhook
      name: webhook

但是,当创建一个Pod (这确实会触发webhook)时,我会得到以下错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
▶ k create -f demo-pod.yaml
Error from server (InternalError): error when creating "demo-pod.yaml": Internal error occurred: failed calling webhook "example-webhook.default.svc.cluster.local": Post "https://example-webhook.default.svc:443/mutate?timeout=30s": no service port 443 found for service "example-webhook"

我不能将web钩子配置为不是在443上调用,而是在80上调用吗?无论哪种方式,TLS终止都是由istio侧way完成的。

有没有办法用VirtualService / DestinationRule解决这个问题?

编辑:最重要的是,为什么它试图到达example-webhook.default.svc端点中的服务?(而它应该在example-webhook.default.svc.cluster.local中这样做)?

更新1

我试图按以下方式使用https

我使用istio的CA创建了一个证书和私钥。

我可以验证我在证书中的DNS名称是否有效,如下所示(从另一个pod)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
echo | openssl s_client -showcerts -servername example-webhook.default.svc -connect example-webhook.default.svc:443 2>/dev/null | openssl x509 -inform pem -noout -text
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
...
 Subject: C = GR, ST = Attica, L = Athens, O = Engineering, OU = FOO, CN = *.cluster.local, emailAddress = me@myemail.com
...
        X509v3 extensions:
            X509v3 Subject Alternative Name:
                DNS:*.default.svc.cluster.local, DNS:example-webhook, DNS:example-webhook.default.svc
...

但是现在pod的创建失败了,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
▶ k create -f demo-pod.yaml
Error from server (InternalError): error when creating "demo-pod.yaml": Internal error occurred: failed calling webhook "example-webhook.default.svc.cluster.local": Post "https://example-webhook.default.svc:443/mutate?timeout=30s": x509: certificate is not valid for any names, but wanted to match example-webhook.default.svc

更新2

使用istio CA证书适当地创建了运行webhook结荚的证书,这一事实也得到了验证。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl --cacert istio_cert https://example-webhook.default.svc
Test

其中istio_cert是包含istio的CA证书的文件

怎么一回事?

EN

回答 3

Stack Overflow用户

发布于 2022-06-06 03:14:52

不确定你能不能在端口80上使用web钩子..。

其中一些可能会对您有用,我使用了以下脚本来生成证书,您可以修改它以满足您的需要:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash

set -e

service=webhook-svc
namespace=default
secret=webhook-certs
csrName=${service}.${namespace}

cat <<EOF >> csr.conf
[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[req_distinguished_name]
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = ${service}
DNS.2 = ${service}.${namespace}
DNS.3 = ${service}.${namespace}.svc
EOF

openssl genrsa -out server-key.pem 2048
openssl req -new -key server-key.pem -subj "/CN=${service}.${namespace}.svc" -out server.csr -config csr.conf

kubectl delete csr ${csrName} 2>/dev/null || true

cat <<EOF | kubectl create -f -
apiVersion: certificates.k8s.io/v1beta1
kind: CertificateSigningRequest
metadata:
  name: ${csrName}
spec:
  groups:
  - system:authenticated
  request: $(< server.csr base64 | tr -d '\n')
  usages:
  - digital signature
  - key encipherment
  - server auth
EOF

sleep 5

kubectl certificate approve ${csrName}

for i in {1 .. 10}
do
    serverCert=$(kubectl get csr ${csrName} -o jsonpath='{.status.certificate}')
    if [[ ${serverCert} != '' ]]; then
        break
    fi
    sleep 1
done
if [[ ${serverCert} == '' ]]; then
    echo "ERROR: After approving csr ${csrName}, the signed certificate did not appear on the resource. Giving up after 10 attempts." >&2
    exit 1
fi


echo "${serverCert}" | openssl base64 -d -A -out server-cert.pem


# create the secret with CA cert and server cert/key
kubectl create secret generic ${secret} \
        --from-file=key.pem=server-key.pem \
        --from-file=cert.pem=server-cert.pem \
        --dry-run -o yaml |
    kubectl -n ${namespace} apply -f -

脚本创建了一个秘密,然后我将其挂载到web钩子deployment.yaml中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: webhook-deployment
  namespace: default
  labels:
    app: webhook
  annotations:
    sidecar.istio.io/inject: "false"
spec:
  replicas: 1
  selector:
    matchLabels:
      app: webhook
  template:
    metadata:
      labels:
        app: webhook
      annotations:
        sidecar.istio.io/inject: "false"
    spec:
      containers:
        - name: webhook
          image: webhook:v1
          imagePullPolicy: IfNotPresent
          volumeMounts:
          - name: webhook-certs
            mountPath: /certs
            readOnly: true
      volumes:
      - name: webhook-certs
        secret:
          secretName: webhook-certs

service.yaml:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: v1
kind: Service
metadata:
  name: webhook-svc
  namespace: default
  labels:
    app: webhook
spec:
  ports:
  - port: 443
    targetPort: 8443
  selector:
    app: webhook
票数 1
EN

Stack Overflow用户

发布于 2022-06-08 12:24:51

您是否尝试将端口属性添加到MutatingWebhookConfiguration中?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
clientConfig:
      service:
        name: example-webhook
        namespace: default
        path: "/mutate"
        port: 80
票数 1
EN

Stack Overflow用户

发布于 2022-06-13 20:32:10

您可以尝试更改值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cat <<EOF | kubectl create -f -
apiVersion: certificates.k8s.io/v1beta1
kind: CertificateSigningRequest
metadata:
  name: ${csrName}
spec:
  groups:
  - system:authenticated
  request: $(< server.csr base64 | tr -d '\n')
  usages:
  - digital signature
  - key encipherment
  - server auth
EOF
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72507275

复制
相关文章
vue子组件传值给父组件_子组件调用父组件中的方法
大家好,又见面了,我是你们的朋友全栈君。 参考视频 : https://www.bilibili.com/video/av32790541/?spm_id_from=trigger_reload 原
全栈程序员站长
2022/10/04
4.2K0
vue子组件传值给父组件_子组件调用父组件中的方法
vue 父组件调用子组件的函数_vue子组件触发父组件方法
项目里将element-ui的el-upload写成公共组件方便调用,官方的before-upload方法用于处理上传前要做的事,如:比较文件大小,限制文件类型等,通过返回true 或 false 控制是否上传。 当该组件调用父组件方法,并且要能获取到父组件方法的返回值,如何实现?
全栈程序员站长
2022/11/10
3K0
vue 父组件调用子组件的方法_vue子组件修改父组件值
我们都知道通过$ref可以获取到某个DOM,但是它也可以用来获取子组件的实例,调用子组件的方法
全栈程序员站长
2022/11/09
2K0
子组件传对象给父组件_react子组件改变父组件的状态
sendData = () => { let data = ‘1234’; this.props.getData(data); //这个this,props.xxx 后面的xxx是是在父组件那使用的名字; }, 然后可以在render函数后使用这个方法或者另外定义一个事件去触发该方法进行传值,
全栈程序员站长
2022/10/04
2.8K0
vue子组件调用父组件函数_vue子组件修改父组件值
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/10
1.7K0
vue父组件中获取子组件中的数据
<FormItem label="上传头像" prop="image"> <uploadImg :width="150" :height="150" :name="'avatar'" size="150px*150px" ref="avatar"></uploadImg> </FormItem> <FormItem label="上传营业执照" prop="businessLicence"> <uploadImg :width="350" :heigh
蓓蕾心晴
2018/04/12
6.9K0
vue父组件调用子组件属性_vue子组件获取父组件实例
但是在vue3中,很显然使用this.$emit() 已经开始报错了,为什么会报错呢?
全栈程序员站长
2022/11/10
2.1K0
vue 父组件调用子组件_react父组件向子组件传值
1.直接在子组件中通过“this.$parent.event”来调用父组件的方法。
全栈程序员站长
2022/11/15
1.9K0
vue中父组件传值给子组件,父组件值改变,子组件不能重新渲染[通俗易懂]
这个方法感觉props’接收数据在调用方法之后,明明父组件的值已经改变了,但是父组件在调用子组件方法时,数据仍然没有 接收到,调用之后才接收到,这个方法暂且没用,应该是声明ref的时候声明的是当前组件的实例,然后调用时调用的也是值未改变时的属性。这个没什么用,可以用来调用子组件方法。
全栈程序员站长
2022/11/16
3K0
react子组件向父组件传递数据_react子组件改变父组件的状态
本博客代码是 React 父组件和子组件相互传值的 demo;实现封装一个折线图,折线图选择下拉框,获取下拉框点击的值并且传给父组件根据下拉框筛选的条件更新视图;效果图如下:
全栈程序员站长
2022/10/03
3.6K0
react子组件向父组件传递数据_react子组件改变父组件的状态
vue父组件引入子组件_vue子组件传递方法给父组件
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
1K0
vue父组件操作子组件的方法_vue父组件获取子组件数据
我们经常分不清什么是父组件,什么是子组件。现在来简单总结下:我们将某段代码封装成一个组件,而这个组件又在另一个组件中引入,而引入该封装的组件的文件叫做父组件,被引入的组件叫做子组件。具体代码如下
全栈程序员站长
2022/09/19
7K0
vue父组件操作子组件的方法_vue父组件获取子组件数据
Vuejs中父组件主动调用子组件的方法
我们都知道,vue是单向流,但是有时候我们需要在父组件中主动通知子组件一些信息,使其做出一些响应变化,那么如何在父组件中去主动调用子组件的方法呢?Vue当然给我们提供了方法,如下:
飞奔去旅行
2019/06/13
5K0
react中父组件向子组件传值
子组件中只能使用不能修改父组件传递过来的数据!!!如果非要修改,那就父组件传递一个方法给子组件,子组件使用这个方法来改变父组件中的数据。这就是react的单项数据流(父组件传递给子组件,不可以在子组件中改变)
全栈程序员站长
2022/09/01
2.5K0
vue中父组件向子组件传值
首先在以下案例中,App.vue是父组件,Second-module.vue是子组件。 总体来说,父传子就是这四个步骤:父组件的data中定义值,引入并调用子组件,在引用的子组件的标签上通过v-bind指令给子组件传值,子组件通过在data中定义的props属性接收父组件传过来的值然后应用到子组件里。 首先,值肯定是定义在父组件中的,供所有子组件共享,所以要在父组件的data中定义值:
全栈程序员站长
2022/09/06
1.4K0
vue中父组件向子组件传值
vue中父组件和子组件交互的方式
vue中使用component来表示组件,通过封装组件,我们可以将代码最大程度的复用,可以说组件是vue中的核心。
程序那些事儿
2023/03/07
5.8K0
vue中父组件和子组件交互的方式
angular子组件传值到父组件_vue子组件传值给父组件
step1: D:\vue\untitled2901\src\app\app.component.ts
全栈程序员站长
2022/10/04
2.7K0
react 子组件向父组件传值_vue父组件给子组件传值
父组件给子组件传递数据,直接用属性名传递,子组件通过props获取父组件传递过来的值
全栈程序员站长
2022/10/03
2.8K0
Vue中父组件向子组件传值
Vue中父组件向子组件传值 相关Html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="../js/vue-2.4.0.js"></script> <style> </style> </head> <body> <div id="app"> <!--父组件可以在引用子组件的时候,通过属性绑定的形式(v-bind
Dream城堡
2018/12/06
1.3K0
vue父组件调用子组件方法返回值_vue子组件修改父组件值
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
1.5K0

相似问题

ReactJS:如何访问父组件中的所有子组件?

12

如何从ReactJs中的父组件访问子组件的输入值?

23

ReactJS:访问组件“父”中的组件

23

ReactJS:访问父级中的子组件属性

14

如何从Reactjs中的子组件更新父组件的组件状态

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文