crossplane / crossplane/function-runtime-oci
Cannot start function container when container user does not exist within crossplane-xfn container
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Go
- Star
- 6
- Fork
- 2
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Mô tả
### What happened?
Working on https://github.com/crossplane/crossplane/pull/4261 required creating a custom, but simple function image that labels all managed resources with a given label. My first idea was to use `yq` for that and the initial `Dockerfile` was just:
```Dockerfile
FROM mikefarah/yq:4.34.1
COPY labelizer.sh /bin
ENTRYPOINT ["/bin/labelizer.sh"]
```
with `/bin/labelizer.sh` being just:
```sh
#!/usr/bin/env sh
yq '(.desired.resources[] | .resource.metadata.labels) |= {"labelizer.xfn.crossplane.io/processed": "true"} + .'
```
Unfortunately, adding this function to a composition resulted with the following error in `crossplane-xfn` logs:
```
cannot compose resources: cannot run Composition Function pipeline: cannot run function "labelizer":
cannot run container: rpc error: code = Unknown desc = exit status 1: xfn: error: spark.Command.Run():
cannot create OCI runtime bundle: cannot write OCI runtime spec: cannot create new spec:
cannot apply spec option: cannot resolve user specified by OCI image config:
cannot resolve UID of user "yq" that doesn't exist in container's /etc/passwd
```
Modifying the image to use root to run the script resolved the issue.
### How can we reproduce it?
* deploy crossplane with enabled composition functions
* build and publish the function image using files stated above
* create a composition referring that function
### What environment did it happen in?
The issue is spotted on the latest master, but I am pretty sure that versions containing composition function feature suffer from the same issue.
### Expectations
Function containers should be successfully invoked independently if container user exists within `crossplane-xfn` container/image. We should even encourage function authors to use some arbitrary high/random UID for function.
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Bắt đầu bằng cách tái hiện lỗi với Dockerfile và labelizer.sh được nêu trong issue, sử dụng một function image có người dùng được cấu hình không tồn tại trong /etc/passwd. Sau đó, lần theo entry point Go gọi OCI container và phân giải người dùng của nó. Được xem là hoàn tất khi các function container khởi động thành công ngay cả khi người dùng được cấu hình của chúng không tồn tại trong image crossplane-xfn, bao gồm cả các UID cao hoặc ngẫu nhiên tùy ý.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- docker, go
- Lĩnh vực
- devops, infrastructure
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 35/100