我可以在提供 kubeconfig 时运行以下代码。这样做我能够获得以下值gr
:
func (o *ApplyOptions) RestMapper() (meta.RESTMapper, error) {\n gr, err := restmapper.GetAPIGroupResources(o.discoveryClient)\n if err != nil {\n return nil, err\n }\n mapper := restmapper.NewDiscoveryRESTMapper(gr)\n return mapper, nil\n}\n
Run Code Online (Sandbox Code Playgroud)\n然后我启动了以下代码:
\nvar kubeconfig *string\n\nkubeconfig = flag.String("kubeconfig", filepath.Join(home, ".kube", "config"), "(optional) absolute path to the kubeconfig file")\n\nflag.Parse()\n\n// use the current context in kubeconfig\nconfig, err := clientcmd.BuildConfigFromFlags("", *kubeconfig)\nif err != nil {\n panic(err.Error())\n}\n\ndynamicClient, err := dynamic.NewForConfig(config)\nif err != nil {\n panic(err.Error())\n}\ndiscoveryClient, err := discovery.NewDiscoveryClientForConfig(config)\nif err != nil {\n …
Run Code Online (Sandbox Code Playgroud) 我想从 cronJob 删除特定文件到以下容器,问题是当我运行 exec 时出现错误,如何 exec 到 distroless 容器(k8s v1.22.5)并从 cronJob 删除文件,哪个选项我们是否有?
这是部署
apiVersion: apps/v1
kind: Deployment
metadata:
name: distro
labels:
app: distro
spec:
replicas: 1
selector:
matchLabels:
app: distro
template:
metadata:
labels:
app: distro
spec:
containers:
- name: edistro
image: timberio/vector:0.21.X-distroless-libc
ports:
- containerPort: 80
Run Code Online (Sandbox Code Playgroud)
我尝试过的是
apiVersion: apps/v1
kind: Deployment
metadata:
name: distro
labels:
app: distro
spec:
replicas: 1
selector:
matchLabels:
app: distro
template:
metadata:
labels:
app: distro
spec:
containers:
- name: edistro
image: timberio/vector:0.21.X-distroless-libc
ports:
- containerPort: 80 …
Run Code Online (Sandbox Code Playgroud) 我们已经在我们的部署资源中定义了 K8s liveness 和 readiness probes (我们已经在那里挑战了 liveness ...),我们需要使用client-go
lib 来访问这个 liveness probe,我们怎么做?
我已经用client-go
lib试过了
https://github.com/kubernetes/client-go
如下:
client.Discovery().RESTClient().Get()
Run Code Online (Sandbox Code Playgroud)
我也试着玩的去图书馆,但没有发现任何部署的财产client.CoreV1()
。但是我确实找到了service
pod
等等。我在这里错过了什么?
PodList, err := client.CoreV1().Pods("mynamespace").List(metav1.ListOptions{LabelSelector: "run=liveness-app"})
最后,我需要根据部署中定义的活性探针获取 pod 活性状态。我的意思是生或死
我在这个库中使用以下代码
provider, err := oidc.NewProvider(ctx, providerURI)
if err != nil {
log.Println(err)
}
Run Code Online (Sandbox Code Playgroud)
在使用相同的 providerURI在本地运行它时,它可以工作,但我能够成功获得提供者!
我使用完全相同的提供程序 url(作为env
变量)将它部署到 K8S并使用调试它port-forwarding
,但是,在 k8S 中我遇到错误并且没有得到provider
.
错误是:
2020/08/14 16:42:22 Get "https://ace.svar.com/.well-known/openid-configuration": x509: certificate signed by unknown authority
Run Code Online (Sandbox Code Playgroud)
我已将证书添加到图像并验证它,exec
部署后我进入 k8s 容器,我看到路径server.crt
下的文件/usr/local/share/ca-certificates/
。
仍然有同样的错误,不知道我是否在这里错过了其他东西......不确定它是否真的与 OIDC lib 或更一般的东西有关..
FROM golang:1.14.7 AS builder
RUN go get github.com/go-delve/delve/cmd/dlv
ADD server.crt /usr/local/share/ca-certificates/server.crt
RUN chmod 644 /usr/local/share/ca-certificates/server.crt && …
Run Code Online (Sandbox Code Playgroud) 我们有一个 k8s 运算符(基于 kubebuilder),它按预期工作,现在我们需要支持侦听集群上的机密。
以下代码正在运行,但是我收到了集群中所有秘密的事件,但效率不高,
我只想获取特定秘密的事件,让我们说特定秘密的事件labels/annotation
,我们该怎么做?
func (r *InvReconciler) SetupWithManager(mgr ctrl.Manager) error {
manager := ctrl.NewControllerManagedBy(mgr).
For(&corev1alpha1.Inv{}, builder.WithPredicates(predicate.Or(predicate.GenerationChangedPredicate{}, predicate.AnnotationChangedPredicate{}))).
WithOptions(controller.Options{
})
manager = manager.Watches(&source.Kind{Type: &v1.Secret{}}, handler.EnqueueRequestsFromMapFunc(func(a client.Object) []reconcile.Request {
return r.secretHandler.GetSecret(a.GetNamespace(), a.GetName())
}))
return manager.Complete(r)
}
Run Code Online (Sandbox Code Playgroud)
这是函数
func (secretReq secretHandler) GetSecret(namespace string, name string) []reconcile.Request {
fmt.Println("secret is: ", namespace, "--", name)
return nil
}
Run Code Online (Sandbox Code Playgroud)
让我们说像下面这样的秘密,并且仅对于这个秘密(带标签foo: bar
)我会在创建或修改它时收到事件
apiVersion: v1
kind: Secret
metadata:
labels:
foo: bar
name: mysecret
namespace: dev
type: Opaque
data: …
Run Code Online (Sandbox Code Playgroud) 我想检查集群中的 pod 是否运行为privileged pods
,这可能表明我们可能存在安全问题,因此我检查是否
privileged: true
然而,在
securityContext:
规范下还有其他字段,例如
allowPrivilegeEscalation
RunAsUser
ProcMount
Capabilities
ETC这可能有风险(不确定),
我的问题是,如果 Pod 被标记为,privileged:false
并且其他字段都为 true,如下例所示,这是否表明存在某些安全问题?该 Pod 是否可以对其他 Pod等执行某些操作,访问外部数据?
例如,以下配置表明 pod 没有特权,但是allowPrivilegeEscalation: true
securityContext:
allowPrivilegeEscalation: true
privileged: false
Run Code Online (Sandbox Code Playgroud)
我想知道哪个securityContext
Pod 配置组合可以控制集群中的其他 Pod ? pods/process
我有 k8s 控制器,需要安装一些资源并相应地更新状态和条件
\n协调的流程如下:
\ncheckAvailability
并相应更新状态我\xe2\x80\x99有两个主要问题:
\nr.Status().Update
我收到错误:Operation cannot be fulfilled on eds.core.vtw.bmw.com \xe2\x80\x9cresouce01\xe2\x80\x9d: the object has been modified; please apply your changes to the latest version and try again , so I\xe2\x80\x99ve added the check
conditionChanged`,它解决了问题,但不确定它是否正确,因为我更新了一次状态,如果它不\xe2\x80\x99t高喊,我不\xe2\x80\x99t触摸它,所以用户可以看到不久前的就绪状态,并且协调不会更新就绪条件的日期和时间,因为它在已经 \xe2\x80\x9cready\xe2\x80\x9d 时跳过它我用以下
\nfunc (r *ebdReconciler) checkHealth(ctx context.Context, req ctrl.Request, ebd ebdmanv1alpha1.ebd) (bool, error) {\n vfmReady, err := r.mbr.IsReady(ctx, req.Name, req.Namespace)\n condition := metav1.Condition{\n Type: …
Run Code Online (Sandbox Code Playgroud) 我有以下适用于我的应用程序的 docker 文件。我能够访问简单的网络应用程序服务器。
FROM golang:1.14.7 AS builder
RUN go get github.com/go-delve/delve/cmd/dlv
RUN mkdir /app
ADD . /app
WORKDIR /app
RUN CGO_ENABLED=0 GOOS=linux go build -gcflags="all=-N -l" -o main ./...
FROM alpine:3.12.0 AS production
COPY --from=builder /app .
EXPOSE 8000 40000
ENV PORT=8000
CMD ["./main"]
Run Code Online (Sandbox Code Playgroud)
当我像下面那样采用它时,我无法将其成功部署到 Kubernetes。容器因一些一般错误而崩溃,而不是我可以使用的东西。
standard_init_linux.go:190: exec user process caused "no such file or directory"
Run Code Online (Sandbox Code Playgroud)
这不起作用
FROM golang:1.14.7 AS builder
RUN go get github.com/go-delve/delve/cmd/dlv
RUN mkdir /app
ADD . /app
WORKDIR /app
RUN CGO_ENABLED=0 GOOS=linux go build -gcflags="all=-N -l" …
Run Code Online (Sandbox Code Playgroud) 我已经创建了一个可以正常工作的 Yeoman 生成器,现在我需要用另外两个问题来扩展它。
这个问题我已经有了
async prompting() {
const prompts = [
{
name: "appName",
message: "Project name: ",
type: "input",
default: this.props!.appName,
validate(input: string) {
const appName = validateAppName(input);
return !appName[1] ? appName[0] : true;
},
},
{
type: "list",
name: "tech",
message: "Which tech?”,
default: “cloud”,
choices: [{ name: “cloud”}, { name: “onPrem” }}],
},
},
];
Run Code Online (Sandbox Code Playgroud)
现在我需要添加其他问题,例如您要创建项目的命名空间
{
type: “list”,
name: "namespace",
suggestOnly: false,
message: "which namespace: ",
source: Namespace.searchNS,
when: () => !isEmpty(this.namespace!.namespaceInstances),
validate(val: boolean) {
return …
Run Code Online (Sandbox Code Playgroud) 我们正在尝试使用github actions
,并且我们希望保留敏感数据,例如kubeconfig
在 github 中,secrets
我创建了一个名为 GitHub 的机密KUBECONFIG1
重现步骤
在 GitHub 秘密中,我应该存储以下文件,并尝试使用此https://onlineyamltools.com/convert-yaml-to-json转换为 JSON
apiVersion: v1
kind: Config
clusters:
- name: brf
cluster:
certificate-authority-data: >-
LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURTakNBd0t6RXBNQ2NHQTFVRUF4TWdkbWx5ZE2bUljTlRtakFWCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0=
server: 'https://vfg.canary.k8s.ondemand.com'
users:
- name: user1
user:
token: >-
eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuW1lc3BhY2UiOiJnYXJkZW4tZGV2e
contexts:
- name: g-root
context:
cluster: garv
user: robot
namespace: gking
current-context: gaot
Run Code Online (Sandbox Code Playgroud)
在 github actions 工作流程中,我们保留上面的文件内容及其名称KUBECONFIG1
,并从中创建 k8s 秘密。
name: Example action
on: [push]
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v2
- name: install …
Run Code Online (Sandbox Code Playgroud) 我有一个 golang 程序,我需要向K8S API server
状态 (livez) api添加一个新调用以获取健康状态。
https://kubernetes.io/docs/reference/using-api/health-checks/
该程序应该在 api 服务器的同一个集群上运行并需要获取/livez
状态,我试图在 client-go lib 中找到这个 API,但没有找到实现它的方法......
https://github.com/kubernetes/client-go
有没有办法从运行在 API 服务器运行的同一个集群上的 Go 程序中做到这一点?
我需要创建一个 k8s 资源,这需要一些时间才能可用,为此我使用以下命令
op, err := controllerutil.CreateOrUpdate(context.TODO(), c, deploy, func() error {
})
func2()
Run Code Online (Sandbox Code Playgroud)
func2
现在我需要在对象创建完成后立即调用(可能需要 2-3 分钟才能完成),我应该如何做?
我发现了这个,但不知道如何将它们结合起来......
https://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg#hdr-Watching_and_EventHandling
我正在使用 kubebuilder
azure go amazon-web-services google-cloud-platform kubernetes
kubernetes ×11
go ×9
azure ×5
docker ×3
certificate ×1
containers ×1
dockerfile ×1
github ×1
javascript ×1
json ×1
kubebuilder ×1
linux ×1
node.js ×1
security ×1
typescript ×1
yeoman ×1